TonUINO als Wecker

Ich habe das Projekt nochmal überarbeitet und die Schaltung verbessert sowie noch ein paar Änderungen im Code vorgenommen. Prinzipiell gilt aber das gleiche wie im vorigen Beitrag.

Und hier noch mal die komplette Codeänderung bezogen auf die Standart Dev version.

Am Anfang bei den Definitionen für die Zusatzfunktionen folgendes einfügen

// ------------------------------------------------------------------------------------------------
#define Wecker                // Über ein externes Weckeruhrwerk wird eine Weckfunktion aktiviert
                              // TonUINO wird eingeschaltet und ein vordefinierter shortcut als Wecker abgespielt
// ------------------------------------------------------------------------------------------------

Dann bei den Definitionen der Pins den Weckerpin einfügen

#ifdef Wecker 
  #define WeckerPin A6              // Eingangspin zum Abspielen Wecker-shortcut
#endif  

Dann vor den Deklarationen des DF-Players folgendes einfügen

#ifdef Wecker 
bool ActWecker = false;                           // Wecker aktiv?
#endif

bool SETUP = true;                                // setup() ist aktiv

Dann in der struct adminsettings die foldersettings der shortcuts ändern

// admin settings stored in eeprom
struct adminSettings {
  uint32_t cookie;
  byte version;
  uint8_t maxVolume;
  uint8_t minVolume;
  uint8_t initVolume;
  uint8_t eq;
  bool locked;
  long standbyTimer;
  bool invertVolumeButtons;
  folderSettings shortCuts[5];   // von 4 nach 5 ändern
  
  uint8_t adminMenuLocked;
  uint8_t adminMenuPin[4];
};

Dann in my settigs die Zeile für den Weckershortcut ergänzen

void resetSettings() {                                            // my Settings auf defaultwerte zurücksetzen
  Serial.println(F("=== resetSettings()"));
  mySettings.cookie = cardCookie;
  mySettings.version = 2;
  mySettings.maxVolume = 25;               // max.Lautstärke
  mySettings.minVolume = 5;                // min.Lautstärke
  mySettings.initVolume = 15;              // Start-Lautstärke
  mySettings.eq = 1;                       // Equalizer Normal
  mySettings.locked = false;               // (nicht mehr benutzt)
  mySettings.standbyTimer = 5;             // Standbytimer auf 5 min
  mySettings.invertVolumeButtons = false;  // Funktion der Vol-Tasten umkehren AUS
  mySettings.shortCuts[0].folder = 0;      // kein Shortcut Pausetaste
  mySettings.shortCuts[1].folder = 0;      // kein Shortcut Vor-taste
  mySettings.shortCuts[2].folder = 0;      // kein Shortcut Rück-taste
  mySettings.shortCuts[3].folder = 0;      // kein Shortcut Welcomesound
  mySettings.shortCuts[4].folder = 0;      // kein Shortcut Weckersound
  mySettings.adminMenuLocked = 0;          // 0 = Adminmenü nicht geschützt, 
                                           // 1 = Schutz durch Adminkarte,  
                                           // 2 = Schutz durch PIN, Reihenfolge von 4 Tastendrücken
  mySettings.adminMenuPin[0] = 1;          // PIN 0 --> erste gedrückte Taste
  mySettings.adminMenuPin[1] = 1;          // PIN 1 --> zweite gedrückte Taste
  mySettings.adminMenuPin[2] = 1;          // PIN 2 --> dritte gedrückte Taste
  mySettings.adminMenuPin[3] = 1;          // PIN 3 --> Vierte gedrückte Taste

  writeSettingsToFlash();
}
// ***********************************************

Dann im Adminmenü Folgendes ändern

 // ********* Eine Taste mit einem Shortcut belegen **************
  else if (subMenu == 7)                     // Shortcut configurieren        (940-944) // 940-945)
    {                                                                                    // 945 Wecksound konfigurieren
      //uint8_t shortcut = voiceMenu(4, 940, 940);
      uint8_t shortcut = voiceMenu(5, 940, 940);                                // Voicemenü inklusive Wecksound
      setupFolder(&mySettings.shortCuts[shortcut - 1]);
      mp3.playMp3FolderTrack(400);              //OK. Ich habe die Karte konfiguriert.
    }

Dann vor der void setup()

Die Funktion Wecker einfügen

// *************************** Wecker *************************************************
#ifdef Wecker 
  void wecker()
  {
  uint16_t ReadWecker;                    // Variable für den ausgelesenen Wert des WeckerPin
  
  if (ActWecker == false)                 // Wenn Wecker noch nicht aktiviert wurde
  {
         
     
  ReadWecker = analogRead(WeckerPin);   // Weil Analogpin 6 und 7 nicht als Digitalpins verwendet werden können
                                        // muss ein Umweg über analogRead() gegangen werden.
                              
   if (ReadWecker >= 512)               // wenn Analogwert WeckerPin > 2,5V
   {
   ActWecker = true;
   playShortCut(4);                     // Wecker abspielen
   
  }
  else
    {
    if(SETUP == true)
    playShortCut(3);                     // Welcomesound spielen
    }
  }
  }
#endif  
//*****************************************************************************************

Dann in der void setup() folgende ergänzunen vornehmen

// *****************************************************************************************
//                           SETUP
// *****************************************************************************************
void setup() 
{
  SETUP = true;
  
  Serial.begin(115200);                   // serielle Schnittstelle initialisieren
 
  // Dieser Hinweis darf nicht entfernt werden
  Serial.println(F("\n _____         _____ _____ _____ _____"));
  Serial.println(F("|_   _|___ ___|  |  |     |   | |     |"));
  Serial.println(F("  | | | . |   |  |  |-   -| | | |  |  |"));
  Serial.println(F("  |_| |___|_|_|_____|_____|_|___|_____|\n"));
  Serial.println(F("TonUINO Version 2.1"));
  Serial.println(F("created by Thorsten Voß and licensed under GNU/GPL."));
  Serial.println(F("Information and contribution at https://tonuino.de.\n"));
  Serial.println(F("*****************************************************"));

Dann ebenfalls im Setup

 // *********** Start Shortcut "at Startup" - e.g. Welcome Sound ************************
  #ifndef Wecker 
    playShortCut(3);
  #endif 
  
  // *************  Wecker ** Hardwareerweiterung erforderlich ****************************
  #ifdef Wecker
  
    wecker(); 
 
  #endif  

  SETUP = false;
}
// ****************** Ende Setup *********************************************

Dann im loop nach der do geschweifte Klammer auf { folgendes einfügen

  // ********************************* Wecker **** Hardwareerweiterung erforderlich *************
  #ifdef Wecker
    if (ActWecker ==false)
    wecker(); 
  #endif

Bei der vorhergehenden Version funktionierte der Wecker nur bei ausgeschaltetem Tonuino. In der neuen Version kann der Wecker auch bei laufender Wiedergabe des Tonuino aktiv werden, z.B dass man einen Termin beim Hörbuch hören nicht verpasst. Die Weckeraktivierung ist bei laufendem Tonuino absichtlich nur einmal möglich. Eine erneuter Weckvorgang ist erst möglich, wenn der Tonuino zwischenzeitlich ausgeschaltet war.

Edit 08.03.2020
In der Rubrik Gehäuse habe ich nun die Fotos des vollendeten TonUINO als Wecker eingestellt.
hier der Link
TonUINO als Wecker - Fotos
Die Ideen reißen nicht ab. Zusätzlich habe ich noch eine Ergänzung in den Code eingearbeitet, die bewirkt dass auch bei eingestecktem Kopfhörer der Weckershortcut über die Lautsprecher abgespielt wird. Funktioniert aber nur, wenn die Lautsprecher über die Software ein oder Ausgeschaltet werden. Ist im Code untenstehender Link enthalten.
Anbei noch ein onedrivelink der alle Dateien enthält. Schaltpläne, Code und angepasste Dateien für den advert und mp3 Ordner der SD-Karte.
Wer Interesse hat darf zugreifen.
TonUINO in max Ausstattung mit Wecker

1 „Gefällt mir“