//----------------------------------------------------------------------
// 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