Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
projektidee_weiter_entwickeln [2012/07/09 12:17] huwaldtprojektidee_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 wäre das [[http://shop.myavr.de/Add-Ons%20und%20Module/myEthernet%20128k.htm?sp=article.sp.php&artID=100043|myEthernet]] um den Wecker damit ins Intranet oder Internet zu bringen.+Eine weitere Kombinationsmöglichkeit ist das [[http://shop.myavr.de/Add-Ons%20und%20Module/myEthernet%20128k.htm?sp=article.sp.php&artID=100043|myEthernet]]um den Wecker damit ins Intranet oder Internet zu bringen.
  
->>>{{:webwecker:bausatz_meth.jpg?400|}}+>{{:webwecker:bausatz_meth.jpg?400|}}
  
->>><code cpp>+><code cpp>
 //---------------------------------------------------------------------- //----------------------------------------------------------------------
 // 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 17: Zeile 17:
 // 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 23: Zeile 23:
 class Application : public Controller class Application : public Controller
 { {
- protected: Button taste; // Klicken = Schlummerfunktion, Halten = Alarm aus  +   ... 
- protected: AnalogDevice lichtsensor; // Dunkel -> LCD Beleuchtung an  +   // I2C-Schittstelle des myEthernet (shared Ram) 
- protected: LcdMK2 anzeige; // Anzeige Uhrzeit, Temperatur und Alarm +   protected: I2C_24Cxx  myethernet    
- protected: SoundChanelB lautsprecher; // Wecksignal/-melodie ausgeben +   protected: uint8 stunden; // Stunden für TWI -> myEthernet 
- protected: I2C_LM75 temperatursensor;       // Raumtemperatur ermitteln +   protected: uint8 minuten; // Minuten für TWI -> myEthernet 
- protected: I2C_DS1307 echtzeituhr;            // Batteriegestützte Echtzeituhr +   protected: uint8 sekunden; // Sekunden für TWI -> myEthernet 
- protected: I2C_24Cxx myethernet;             // I2C-Schittstelle des myEthernet (shared Ram) +   protected: uint8_t wait; // Wartezeit für TWI
- 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 + ... 
- alarmDauer = 0; // Alarm aus + myethernet.config(0xB0); // wie in config.cfg festgelegt 
- neueZeit   = false; // noch keine neue Uhrzeit vom PC empfangen  + ... 
- neuerAlarm = false; // noch keine neue Weckzeit vom PC empfangen + wait= 1; // Wartezeit für TWI
- 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  + ... 
- echtzeituhr.formatTimeToString(text,"%h:%m:%s Uhr"); + stunden = echtzeituhr.hours; // Stunden TWI 
- anzeige.writeLine(1,text); + waitMs(wait); 
- konsole.sendString(text+"|");+ myethernet.writeData(2stunden); 
 + waitMs(wait);
   
- stunden = echtzeituhr.hours; // Stunden TWI + minuten = echtzeituhr.minutes; // Minuten TWI 
- waitMs(wait); + waitMs(wait); 
- myethernet.writeData(2stunden); + myethernet.writeData(3minuten); 
- waitMs(wait);+ waitMs(wait);
   
- minuten = echtzeituhr.minutes; // Minuten TWI + sekunden = echtzeituhr.seconds; // Sekunden TWI 
- waitMs(wait); + waitMs(wait); 
- myethernet.writeData(3minuten); + myethernet.writeData(4sekunden); 
- 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>
  
->>> [[webweckerkomplettcpp|der komplette Quelltext für die WebWecker-Firmware]]+> [[webweckerkomplettcpp|der komplette Quelltext für die WebWecker-Firmware]]
  
  
 >{{:webwecker.jpg?750|}} >{{:webwecker.jpg?750|}}
  
->>><code html>+><code html>
 <html> <html>
 <head> myAVR WebWecker </head> <head> myAVR WebWecker </head>
Zeile 284: Zeile 164:
 </code> </code>
  
->>{{:wecker_html.png?700|}}+>{{:wecker_html.png?700|}}
  
 ====== Weiter im Projekt ====== ====== Weiter im Projekt ======