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