Programmablauf


Außerhalb von setup() und loop()

  • Auskommentiert: Programmname, Version, Ersteller, Hardware-Liste.
  • #include-Anweisungen, darunter auch parameterset4clock1.h, welche die Werte für Displayhelligkeit, Lautstärke etc. enthält, die man somit für jeden Wecker, den man baut, in einer eigenen Datei (parameterset4clock2.h, …clock3.h etc.) individuell festlegen kann.
  • Deklaration (und teilweise Definition) von Objekten, Konstanten, Variablen, Funktionen.

 

In setup()

  • Zuweisung der digitalen Ein- und Ausgangs-Pins.
  • Um Störgeräusche zu vermeiden, die sich von den Displays auf den Lautsprecher übertragen können: Lautsprecher per Relaiskontakt vom Ausgang des MP3-Moduls trennen.
  • Displays initialisieren, Displaypotiwerte einlesen und Helligkeit einstellen.
  • MP3-Player initialisieren, Lautstärkepotiwert einlesen, Lautstärke einstellen.
  • FRAM-Modul initialisieren, Stunden- und Minutenwerte einlesen, prüfen und in die Variablen übertragen.
  • Doppelpunkt der Zeitanzeige einschalten.
  • Um bei einem netzseitigen Stromausfall nach dem Neustart des Arduino den Alarm nicht zu verpassen und auch in diesem Fall zuverlässig zu wecken: Prüfen, ob Stunden und Minuten der Uhrzeit und Alarmzeit identisch sind. Falls ja: Alarm-MP3-Datei abspielen.

 

In loop()

  • Displaypotiwerte einlesen und die Helligkeit einstellen
  • Lautstärkepotiwert einlesen und die Lautstärke einstellen
  • Stunde, Minute und Sekunde aus dem Uhren-Modul (RTC) lesen und in die Variablen schreiben

 

  • Prüfen, ob der Uhren-Drehschalter auf „Einstellen“ steht
    • Falls nein
      • Blinken des Displays abschalten
    • Falls ja:
      • Prüfen, ob eine der Einstelltasten gedrückt gehalten wird
        • Falls nein
          • Blinken des Displays einschalten
        • Falls ja
          • Blinken des Displays abschalten
          • Gemäß der jeweils gedrückten Taste den Stunden- bzw. Minuten-Wert der entsprechenden Variablen erhöhen bzw. erniedrigen und in die RTC schreiben
          • Die Sekunden der Uhrzeit ins Alarmdisplay schreiben
  • Stunde und Minute ins Uhren-Display schreiben

 

  • Prüfen, ob der Alarm-Drehschalter auf „An“ oder „Einstellen“ steht
  • Falls der Alarm-Schalter auf „An“ UND der Uhren-Schalter NICHT auf „Einstellen“ steht:
    • Alarm-Display-Blinken ausschalten, Doppelpunkt anzeigen, Alarmzeit anzeigen
    • Falls das FRAM-Modul nicht die aktuellen Alarmzeitwerte enthält (weil gerade von „Alarm einstellen“ auf „Alarm an“ umgeschaltet wurde)
      • FRAM neu schreiben, Variablen setzen und merken, dass FRAM jetzt wieder aktuell ist

 

  • Falls der Alarm-Schalter auf „Einstellen“ UND der Uhren-Schalter NICHT auf „Einstellen“ steht:
    • Doppelpunkt anzeigen
    • Prüfen, ob eine der Einstelltasten gedrückt gehalten wird
      • Falls nein
        • Blinken des Displays einschalten
      • Falls ja
        • Blinken des Displays abschalten
        • Gemäß der jeweils gedrückten Taste den Stunden- bzw. Minuten-Wert der entsprechenden Variablen erhöhen bzw. erniedrigen und merken, dass das FRAM nun nicht mehr aktuell ist
  • Stunde und Minute ins Alarm-Display schreiben

 

  • Falls der Alarm-Drehschalter weder auf „An“ noch auf „Einstellen“ steht und auch der Uhren-Drehschalter nicht auf „Einstellen“ steht
    • Lösche die Anzeige des Alarm-Displays

 

  • Prüfen, ob die MP3-Datei gerade NICHT abgespielt wird
    • Falls ja
      • Relais-Kontakt zum Lautsprecher öffnen

 

  • Prüfen, ob der Alarmschalter auf „An“ steht UND die Uhrzeit (Stunde, Minute und Sekunde) mit der Alarmzeit übereinstimmt UND die MP3-Datei nicht bereits läuft
    • Falls ja
      • Relais-Kontakt schließen, Abspielen der MP3-Datei starten

 

  • Prüfen, ob der Alarmschalter NICHT auf „An“ steht
    • Falls ja
      • Prüfen, ob die MP3-Datei gerade abgespielt wird
        • Falls ja
          • Abspielen stoppen, Relais-Kontakt öffnen