Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende Überarbeitung | Letzte ÜberarbeitungBeide Seiten der Revision | ||
webweckerkomplettcpp [2012/07/09 12:23] – huwaldt | webweckerkomplettcpp [2012/07/09 12:24] – huwaldt | ||
---|---|---|---|
Zeile 12: | Zeile 12: | ||
// Takt : 3,6864 MHz | // Takt : 3,6864 MHz | ||
// Sprache | // Sprache | ||
- | // Version | + | // Version : 1.01 |
// Datum : 21.06.2012 | // Datum : 21.06.2012 | ||
// Autor : Alexander Huwaldt | // Autor : Alexander Huwaldt | ||
Zeile 18: | Zeile 18: | ||
class Application : public Controller | class Application : public Controller | ||
{ | { | ||
- | ... | + | protected: Button taste; |
- | | + | protected: AnalogDevice lichtsensor; |
- | | + | protected: LcdMK2 anzeige; |
- | | + | protected: SoundChanelB lautsprecher; |
- | | + | protected: I2C_LM75 temperatursensor; |
- | | + | protected: I2C_DS1307 echtzeituhr; |
- | | + | protected: I2C_24Cxx myethernet; |
+ | protected: | ||
+ | protected: String buffer; | ||
+ | protected: bool neuerAlarm; | ||
+ | protected: bool neueZeit; | ||
+ | protected: String text; | ||
+ | protected: Eeprom eeprom; | ||
+ | protected: Eeprom_uint8 weckStunde; | ||
+ | protected: Eeprom_uint8 weckMinute; | ||
+ | protected: Eeprom_uint8 weckSekunde; | ||
+ | protected: uint8 alarmDauer; | ||
+ | protected: uint8 stunden; | ||
+ | protected: uint8 minuten; | ||
+ | protected: uint8 sekunden; | ||
+ | protected: uint8_t wait; | ||
- | // wird einmalig bein Einschalten des Systems ausgeführt | + | // wird einmalig bein Einschalten des Systems ausgeführt |
- | | + | public: void onStart() |
- | | + | { |
- | // Initialisierungssequenz | + | // Initialisierungssequenz |
- | ... | + | // weckStunde=weckMinute=weckSekunde=0xFF nach Brennen |
- | myethernet.config(0xB0); | + | alarmDauer = 0; // Alarm aus |
- | ... | + | neueZeit |
- | wait= 1; // Wartezeit für TWI | + | neuerAlarm = false; // noch keine neue Weckzeit vom PC empfangen |
+ | taste.config(portB, | ||
+ | lichtsensor.config(0); | ||
+ | temperatursensor.config(0x90); | ||
+ | echtzeituhr.config(0xD0); | ||
+ | konsole.config(9600); | ||
+ | myethernet.config(0xB0); | ||
+ | |||
+ | // Begrüßungssequenz nach Programmieren, | ||
+ | anzeige.backLightOn(); | ||
+ | anzeige.writeLine(1," | ||
+ | anzeige.writeLine(2," | ||
+ | // Begrüßungstonfolge | ||
+ | lautsprecher.play(FLASHSTR(" | ||
+ | // einen Moment fürs Auge stehen lassen | ||
+ | waitMs(3000); | ||
+ | anzeige.clear(); | ||
+ | anzeige.backLightOff(); | ||
+ | |||
+ | |||
+ | wait= 1; // Wartezeit für TWI | ||
} | } | ||
- | // wird wiedeholend aus der " | + | // wird wiedeholend aus der " |
- | | + | // hier alles was Zeit hat verarbeiten |
- | | + | public: void onWork() |
- | | + | { |
- | ... | + | // Anzeigezyklus |
- | stunden = echtzeituhr.hours; | + | echtzeituhr.formatTimeToString(text," |
- | waitMs(wait); | + | anzeige.writeLine(1,text); |
- | myethernet.writeData(2, stunden); | + | konsole.sendString(text+" |
- | waitMs(wait); | + | |
- | minuten | + | stunden |
- | waitMs(wait); | + | waitMs(wait); |
- | myethernet.writeData(3, minuten); | + | myethernet.writeData(2, stunden); |
- | waitMs(wait); | + | waitMs(wait); |
- | sekunden | + | minuten |
- | waitMs(wait); | + | waitMs(wait); |
- | myethernet.writeData(4, sekunden); | + | myethernet.writeData(3, minuten); |
- | waitMs(wait); | + | waitMs(wait); |
- | ... | + | |
- | + | ||
- | myethernet.writeData(0, | + | |
- | waitMs(wait); | + | |
- | myethernet.writeData(1, | + | |
- | ... | + | |
- | + | ||
+ | sekunden = echtzeituhr.seconds; | ||
+ | waitMs(wait); | ||
+ | myethernet.writeData(4, | ||
+ | waitMs(wait); | ||
+ | |||
+ | int16 t = temperatursensor.getValue(); | ||
+ | |||
+ | t *= 25; // Umrechnung auf Zehntel-Temperatur | ||
+ | t += 10; // für Übergabe als 16 Bit Zahl | ||
+ | t /= 20; | ||
+ | |||
+ | text.formatNum(t, | ||
+ | anzeige.writeLine(2, | ||
+ | anzeige.write(" | ||
+ | text += " | ||
+ | konsole.sendString(text + " | ||
+ | |||
+ | myethernet.writeData(0, | ||
+ | waitMs(wait); | ||
+ | myethernet.writeData(1, | ||
+ | |||
+ | // Beleuchtungslogik | ||
+ | if (lichtsensor.getValue8()> | ||
+ | anzeige.backLightOff(); | ||
+ | else | ||
+ | anzeige.backLightOn(); | ||
+ | |||
+ | // Wecklogik | ||
+ | if (weckSekunde< | ||
+ | { | ||
+ | // Weckzyklus starten? | ||
+ | if ( alarmDauer | ||
+ | weckStunde | ||
+ | weckMinute | ||
+ | weckSekunde == echtzeituhr.seconds ) | ||
+ | { | ||
+ | // Weckzeit 120s | ||
+ | alarmDauer = 120; | ||
+ | } | ||
+ | anzeige.setPos(2, | ||
+ | if (alarmDauer> | ||
+ | anzeige.write(" | ||
+ | if (alarmDauer> | ||
+ | anzeige.write(" | ||
+ | else | ||
+ | anzeige.write(" | ||
+ | } | ||
+ | else | ||
+ | anzeige.write(" | ||
+ | |||
+ | // wenn vom PC neue Uhrzeit empfangen -> Echtzeituhr stellen | ||
+ | if ( neueZeit ) | ||
+ | { | ||
+ | // Format: 13:44:00T | ||
+ | neueZeit = false; | ||
+ | echtzeituhr.setTime(buffer); | ||
+ | buffer = ""; | ||
+ | } | ||
+ | |||
+ | // wenn vom PC neue Weckzeit empfangen -> Wecker stellen | ||
+ | if ( neuerAlarm ) | ||
+ | { | ||
+ | // Format: 06:30:00A | ||
+ | neuerAlarm = false; | ||
+ | echtzeituhr.convertTime(buffer); | ||
+ | weckStunde = echtzeituhr.hours; | ||
+ | weckMinute = echtzeituhr.minutes; | ||
+ | weckSekunde= echtzeituhr.seconds; | ||
+ | buffer = ""; | ||
+ | } | ||
+ | |||
+ | // Pause, Zeit fürs Auge // | ||
+ | waitMs(900); | ||
} | } | ||
- | // einmal pro Sekunde nachschauen ob Weckmelodie neu gestartet werden muss | + | // einmal pro Sekunde nachschauen ob Weckmelodie neu gestartet werden muss |
- | | + | public: void onTimer1s() |
- | | + | { |
- | ... | + | if (alarmDauer> |
- | | + | { |
+ | alarmDauer--; | ||
+ | if (alarmDauer< | ||
+ | lautsprecher.play(FLASHSTR(" | ||
+ | | ||
+ | } | ||
+ | } | ||
- | // Ereignisbehandlung für Daten vom PC oder Tastenaktivität | + | // Ereignisbehandlung für Daten vom PC oder Tastenaktivität |
- | | + | public: void onEvent(const Object& sender, uint8 data) |
- | | + | { |
- | ... | + | if (sender == konsole) |
- | | + | { |
+ | buffer+=(char)data; | ||
+ | if (data==' | ||
+ | neueZeit=true; | ||
+ | else if (data==' | ||
+ | neuerAlarm=true; | ||
+ | } | ||
+ | else if (sender == taste) | ||
+ | { | ||
+ | lautsprecher.stop(); | ||
+ | if (data == Button:: | ||
+ | alarmDauer = 120 + 60; // 120s Alarmzeit + 60s Snooze | ||
+ | else if (data==Button:: | ||
+ | alarmDauer = 0; // Alarm aus | ||
+ | } | ||
+ | } | ||
} app; | } app; | ||
</ | </ |