//---------------------------------------------------------------------- // Titel : Entwurf für den myAVR C++ Wecker www.avr-cpp.de //---------------------------------------------------------------------- // Funktion : Wecker mit Echtzeituhr, Temperaturanzeige und PC-Frontend // Schaltung : PortD = LCD, PortB.0 = Taste, PortB.1 = LCD-Backlight // PortB.2 = Speaker, PortC.0 = Lichtsensor // PortC.4 und PortC.5 = I2C (TWI/SCL/SDA) //---------------------------------------------------------------------- // Prozessor : ATmega8 // Takt : 3,6864 MHz // Sprache : myAVR C++ // Version : 1 // Datum : 16.06.2012 // Autor : Alexander Huwaldt //---------------------------------------------------------------------- class Application : public Controller { // Instanzen der Komponenten anlegen // ---------------------------------------------------------- // Button für Klicken = Schlummerfunktion, Halten = Alarm aus // Lichtsensor, Dunkel -> LCD Beleuchtung an // LCD für Anzeige Uhrzeit, Temperatur und Alarm mit // Zwischenspeicher für Texteausgaben // Lautsprecher für Wecksignal/-melodie ausgeben // Temperatursensor für Raumtemperatur ermitteln // Batteriegestützte Echtzeituhr // UART für Verbindung zum PC-Programm mit einem // Zwischenspeicher für Kommandos vom PC-Programm // Signal wenn neue Weckzeit empfangen wurde // Signal wenn neue Uhrzeit empfangen wurde // EEPROM zum sicheren der Weckzeiten auch bei Stromausfall // SRAM gepufferte EEPROM Variablen für Weckzeiten // Dauer des Weckalarms in Serunden // wird einmalig bein Einschalten des Systems ausgeführt public: void onStart() { // Initialisierungssequenz // Variablen initialisieren // Komponenten initialisieren // Taste initialisieren auf B.0 // Lichstsensor initialisieren auf C.0 // Temperatursensor initialisieren Adresse 0x90 // Echtzeituhr initialisieren Adresse 0xD0 // UART initialisieren auf 9600 Bqaud // Begrüßungssequenz nach Programmieren, Reset oder Power ON // LCD.Licht an // LCD "Willkommen beim kleinen Projekt"); // Begrüßungstonfolge // einen Moment fürs Auge stehen lassen // LCD wieder aufräumen } // wird wiedeholend aus der "MainLoop" des AppKernel aufgerufen // hier alles was Zeit hat verarbeiten public: void onWork() { // Anzeigezyklus // echtzeituhr auslesen // Zeit auf LCD anzeigen // Zeit an PC senden // Temperatursensor auslesen // Temperatur auf LCD anzeigen // Temperatur an PC senden // Beleuchtungslogik // WENN zu dunken DANN // LCD.Licht an // SONST // LCD.Licht aus // Wecklogik // WENN Wecker gestellt ist // UND WENN Weckzeit erreicht DANN // alarmDauer = 2 Minuten // Alarmzustand auf LCD anzeigen // WENN vom PC neue Uhrzeit empfangen DANN // Echtzeituhr stellen // WENN vom PC neue Weckzeit empfangen DANN // Wecker stellen // Pause, Zeit fürs Auge } // einmal pro Sekunde nachschauen ob Weckmelodie neu gestartet werden muss public: void onTimer1s() { // WENN Alarm // alarmDauer runter zählen // WENN kein Schlummermodus und keine Weckmelodie spielt DANN // Weckmelodie spielen } // Ereignisbehandlung für Daten vom PC oder Tastenaktivität public: void onEvent(const Object& sender, uint8 data) { // WENN Daten vom PC ankommen // Daten zwischenspeichern // WENN Kommando T = Time // Signal neue Zeit // ODER WENN Kommando A = Alarm // Siganl neue Weckzeit // WENN Taste betätigt wurde DANN // Lautsprecher aus // WENN Taste nur geklickt wurde // Schlummermodus // WENN Tatse lange gehalten wird DANN // Alarm aus } } app;