Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
projektidee_weiter_entwickeln [2012/07/09 12:14] – huwaldt | projektidee_weiter_entwickeln [2019/07/27 16:58] (aktuell) – [Der myAVR C++ WebWecker] huwi | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
====== Der myAVR C++ WebWecker ====== | ====== Der myAVR C++ WebWecker ====== | ||
- | Eine weitere Kombinationsmöglichkeit | + | Eine weitere Kombinationsmöglichkeit |
- | >>>< | + | >{{: |
+ | |||
+ | >< | ||
// | // | ||
// Titel : WebWecker-Lösung zum myAVR C++ Tutorial www.avr-cpp.de | // Titel : WebWecker-Lösung zum myAVR C++ Tutorial www.avr-cpp.de | ||
Zeile 15: | Zeile 17: | ||
// Takt : 3,6864 MHz | // Takt : 3,6864 MHz | ||
// Sprache | // Sprache | ||
- | // Version : 1.01 | + | // Version |
// Datum : 21.06.2012 | // Datum : 21.06.2012 | ||
// Autor : Alexander Huwaldt | // Autor : Alexander Huwaldt | ||
Zeile 21: | Zeile 23: | ||
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 | + | ... |
- | alarmDauer = 0; // Alarm aus | + | myethernet.config(0xB0); |
- | neueZeit | + | ... |
- | neuerAlarm = false; // noch keine neue Weckzeit vom PC empfangen | + | wait= 1; // Wartezeit für TWI |
- | 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 | + | ... |
- | echtzeituhr.formatTimeToString(text," | + | stunden = echtzeituhr.hours; |
- | anzeige.writeLine(1,text); | + | waitMs(wait); |
- | konsole.sendString(text+" | + | myethernet.writeData(2, stunden); |
+ | waitMs(wait); | ||
- | stunden = echtzeituhr.hours; | + | minuten = echtzeituhr.minutes; |
- | waitMs(wait); | + | waitMs(wait); |
- | myethernet.writeData(2, | + | myethernet.writeData(3, |
- | waitMs(wait); | + | waitMs(wait); |
- | + | ||
- | minuten = echtzeituhr.minutes; | + | |
- | waitMs(wait); | + | |
- | myethernet.writeData(3, | + | |
- | waitMs(wait); | + | |
- | + | ||
- | sekunden = echtzeituhr.seconds; | + | |
- | waitMs(wait); | + | |
- | myethernet.writeData(4, | + | |
- | waitMs(wait); | + | |
- | + | ||
- | int16 t = temperatursensor.getValue(); | + | |
- | t *= 25; // Umrechnung auf Zehntel-Temperatur | + | sekunden |
- | t += 10; // für Übergabe als 16 Bit Zahl | + | waitMs(wait); |
- | t /= 20; | + | myethernet.writeData(4, sekunden); |
- | + | waitMs(wait); | |
- | text.formatNum(t, 1, 5, ' '); | + | ... |
- | anzeige.writeLine(2, text); | + | |
- | anzeige.write(" | + | myethernet.writeData(0, (uint8_t)t); // Schreibe Byte 1 in SRAM des myEthernets |
- | text += " | + | waitMs(wait); |
- | konsole.sendString(text + " | + | myethernet.writeData(1, (uint8_t)(t/ |
+ | ... | ||
+ | |||
- | 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; | ||
</ | </ | ||
- | >>> | + | > [[webweckerkomplettcpp|der komplette Quelltext für die WebWecker-Firmware]] |
> | > | ||
- | >>>< | + | >< |
< | < | ||
< | < | ||
Zeile 281: | Zeile 164: | ||
</ | </ | ||
- | >> | + | > |
====== Weiter im Projekt ====== | ====== Weiter im Projekt ====== |