Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
webweckerkomplettcpp [2012/07/09 12:23]
huwaldt
webweckerkomplettcpp [2019/01/29 15:33] (aktuell)
Zeile 12: Zeile 12:
 // Takt      : 3,6864 MHz // Takt      : 3,6864 MHz
 // Sprache ​  : myAVR C++ // Sprache ​  : myAVR C++
-// Version ​  ​: 1.01+// 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;​ //​ Klicken = Schlummerfunktion,​ Halten = Alarm aus  
-   ​// I2C-Schittstelle des myEthernet (shared Ram) + protected: AnalogDevice lichtsensor;​ //​ Dunkel -> LCD Beleuchtung an  
-   ​protected: ​I2C_24Cxx ​ myethernet    + protected: LcdMK2 anzeige;​ //​ Anzeige Uhrzeit, Temperatur und Alarm 
-   ​protected: uint8 stunden;​ //​ Stunden für TWI -> myEthernet + protected: SoundChanelB lautsprecher;​ //​ Wecksignal/​-melodie ausgeben 
-   ​protected: uint8 minuten;​ //​ Minuten für TWI -> myEthernet + protected: I2C_LM75 temperatursensor; ​      // Raumtemperatur ermitteln 
-   ​protected: uint8 sekunden;​ //​ Sekunden für TWI -> myEthernet + protected: I2C_DS1307 echtzeituhr; ​           // Batteriegestützte Echtzeituhr 
-   ​protected: uint8_t wait;​ //​ Wartezeit für TWI+ protected: I2C_24Cxx myethernet; ​            // I2C-Schittstelle des myEthernet (shared Ram) 
 + protected: ​Uart konsole; // Verbindung zum PC-Programm 
 + protected: String buffer;​ //​ Zwischenspeicher für Kommandos vom PC-Programm 
 + protected: bool neuerAlarm;​ //​ true wenn neue Weckzeit empfangen wurde 
 + protected: bool neueZeit;​ //​ true wenn neue Uhrzeit empfangen wurde 
 + protected: String text;​ //​ Zwischenspeicher für Texteausgaben 
 + protected: Eeprom eeprom;​ //​ Initialisiert EEPROM-Zugriff 
 + protected: Eeprom_uint8 weckStunde;​ //​ SRAM gepufferte EEPROM Variable  
 + protected: Eeprom_uint8 weckMinute;​ //​ SRAM gepufferte EEPROM Variable 
 + protected: Eeprom_uint8 weckSekunde;​ //​ SRAM gepufferte EEPROM Variable 
 + protected: uint8 alarmDauer;​ //​ Dauer des Weckalarms in Serunden 
 + protected: uint8 stunden;​ //​ Stunden für TWI -> myEthernet 
 + protected: uint8 minuten;​ //​ Minuten für TWI -> myEthernet 
 + protected: uint8 sekunden;​ //​ Sekunden für TWI -> myEthernet 
 + protected: uint8_t wait;​ //​ Wartezeit für TWI
   
-   // wird einmalig bein Einschalten des Systems ausgeführt ​    + // wird einmalig bein Einschalten des Systems ausgeführt ​    
-   ​public: void onStart() + public: void onStart() 
-   ​+
- // Initialisierungssequenz  + // Initialisierungssequenz  
- ... + // weckStunde=weckMinute=weckSekunde=0xFF nach Brennen 
- myethernet.config(0xB0);​ //​ wie in config.cfg festgelegt + alarmDauer = 0; // Alarm aus 
- ... + neueZeit ​  = false; // noch keine neue Uhrzeit vom PC empfangen  
- wait= 1; // Wartezeit für TWI+ neuerAlarm = false; // noch keine neue Weckzeit vom PC empfangen 
 + taste.config(portB,​bit0);​ //​ Taste initialisieren  
 + lichtsensor.config(0);​ //​ Lichstsensor initialisieren 
 + temperatursensor.config(0x90);​ //​ Temperatursensor initialisieren 
 + echtzeituhr.config(0xD0);​ //​ Echtzeituhr initialisieren 
 + konsole.config(9600);​ //​ UART initialisieren 
 + myethernet.config(0xB0);​ //​ wie in config.cfg festgelegt 
 +  
 + // Begrüßungssequenz nach Programmieren,​ Reset oder Power ON 
 + anzeige.backLightOn();​  
 + anzeige.writeLine(1,"​Willkommen beim"​);​ 
 + anzeige.writeLine(2,"​kleinen Projekt"​);​ 
 + // Begrüßungstonfolge 
 + lautsprecher.play(FLASHSTR("​a.a.a.ddd.ccc"​));​ 
 + // einen Moment fürs Auge stehen lassen 
 + waitMs(3000);​ 
 + anzeige.clear();​ 
 + anzeige.backLightOff();​ 
 +  
 +  
 + wait= 1; // Wartezeit für TWI
  }  }
  
-   // wird wiedeholend aus der "​MainLoop"​ des AppKernel aufgerufen + // wird wiedeholend aus der "​MainLoop"​ des AppKernel aufgerufen 
-   ​// hier alles was Zeit hat verarbeiten + // hier alles was Zeit hat verarbeiten 
-   ​public: void onWork() + public: void onWork() 
-   ​+
- ... + // Anzeigezyklus ​ 
- stunden = echtzeituhr.hours;​ // Stunden TWI + echtzeituhr.formatTimeToString(text,"​%h:​%m:​%s Uhr"); 
- waitMs(wait); + anzeige.writeLine(1,text); 
- myethernet.writeData(2stunden); + konsole.sendString(text+"​|"​);
- waitMs(wait);+
   
- minuten ​= echtzeituhr.minutes; // Minuten ​TWI + stunden ​= echtzeituhr.hours; // Stunden ​TWI 
- waitMs(wait);​ + waitMs(wait);​ 
- myethernet.writeData(3minuten); + myethernet.writeData(2stunden); 
- waitMs(wait);​+ waitMs(wait);​
   
- sekunden ​= echtzeituhr.seconds; // Sekunden ​TWI + minuten ​= echtzeituhr.minutes; // Minuten ​TWI 
- waitMs(wait);​ + waitMs(wait);​ 
- myethernet.writeData(4sekunden); + myethernet.writeData(3minuten); 
- waitMs(wait);​ + waitMs(wait);​
- ...     ​  +
-    +
- myethernet.writeData(0,​ (uint8_t)t);​ //​ Schreibe Byte 1 in SRAM des myEthernets +
- waitMs(wait);​ +
- myethernet.writeData(1,​ (uint8_t)(t/​256));​ // Schreibe Byte 2 in SRAM des myEthernets +
- ...     ​  +
-   +
   
 + sekunden = echtzeituhr.seconds;​ //​ Sekunden TWI
 + waitMs(wait);​
 + myethernet.writeData(4,​ sekunden);
 + waitMs(wait);​
 +
 + int16 t = temperatursensor.getValue(); ​ // hole Temperatur
 +
 + t *= 25; // Umrechnung auf Zehntel-Temperatur
 + t += 10; // für Übergabe als 16 Bit Zahl
 + t /= 20;
 +
 + text.formatNum(t,​ 1, 5, ' ');
 + anzeige.writeLine(2,​ text);
 + anzeige.write("​\xdf"​ "​C"​);​
 + text += "​°C";​
 + konsole.sendString(text + "​\n"​);​
 +
 + myethernet.writeData(0,​ (uint8_t)t);​ //​ Schreibe Byte 1 in SRAM des myEthernets
 + waitMs(wait);​
 + myethernet.writeData(1,​ (uint8_t)(t/​256));​ // Schreibe Byte 2 in SRAM des myEthernets
 +
 + // Beleuchtungslogik
 + if (lichtsensor.getValue8()>​150)
 + anzeige.backLightOff();​
 + else
 + anzeige.backLightOn();​
 +
 + // Wecklogik
 + if (weckSekunde<​60)
 + {
 + // Weckzyklus starten?
 + if ( alarmDauer ​ == 0 &&
 + weckStunde ​ == echtzeituhr.hours &&​  ​
 + weckMinute ​ == echtzeituhr.minutes &&
 + weckSekunde == echtzeituhr.seconds )
 + {
 + // Weckzeit 120s
 + alarmDauer = 120;
 + }
 + anzeige.setPos(2,​10);​
 + if (alarmDauer>​120)
 + anzeige.write("​SNOOZE ");
 + if (alarmDauer>​0)
 + anzeige.write("​ALARM ​ ");
 + 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 //​geändert!
 + 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() + public: void onTimer1s() 
-   ​+
- ...      + if (alarmDauer>​0) 
-   ​}+
 + alarmDauer--;​ 
 + if (alarmDauer<​=120 && !lautsprecher.isPlaying()) 
 + lautsprecher.play(FLASHSTR("​vfff,,​fff,,​fff,,​dd,​a,​ff.dd,​a,​ffff.."​ 
 +  ​ "​CCC,,​CCC,,​CCC,,​DD,​C,​ff.dd,​a,​ffff..."​) ); 
 + } 
 + }
   
-   // 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) + public: void onEvent(const Object& sender, uint8 data) 
-   ​+
- ...       + if (sender == konsole) 
-   ​}+
 + buffer+=(char)data;​ 
 + if (data=='​T'​) 
 + neueZeit=true;​ 
 + else if (data=='​A'​) 
 + neuerAlarm=true;​ 
 +
 + else if (sender == taste) 
 +
 + lautsprecher.stop();​  
 + if (data == Button::​Click) 
 + alarmDauer = 120 + 60;    // 120s Alarmzeit + 60s Snooze 
 + else if (data==Button::​HoldStart) 
 + alarmDauer = 0;    // Alarm aus 
 + } 
 + }
 } app; } app;
  
 </​code>​ </​code>​