//----------------------------------------------------------------------
// 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;
zurück