Hallo @4-Farben-Stift
Ich habe jetzt nach ein paar kleineren Problemen die Funktion ans Laufen gebracht. Dabei ist mir folgendes aufgefallen. Die Funktion legt auch von einem schortcut der auf eine der anderen Tasten und dem Startsound einen shortcut auf die Playtaste. Ich bin im moment dabei eine Lösung zu finden, das nur ein shortcut auf Play gelegt wird wenn eine Karte gespielt wird.
Desweiteren habe ich festgestellt, dass in deinem Code der EEPROM bei jedem Durchlauf der loop Schleife geschrieben wird. Ich habe mal irgendwo gelesen, dass die EEPROMS bezüglich der Schreibzyklen eine begrenzte Lebensdauer haben. Das heißt, dass durch das permanente Beschreiben der Arduino bzw EEPROM nah einiger Zeit nicht mehr funktioniert.
Um das zu vermeiden bin ich auch noch dabei den Code dahingehend zu ändern, dass nur bei einem Trackwechsel der EEPROM beschrieben wird.
Wenn ich eine funktionierende Lösung habe werde ich sie hier posten. Aber vielleicht hast du da auch noch Ideen.
Guten Rutsch ins Neue Jahr wünsche ich noch
Gruß Thomas
So, es ist geschafft. Ich habe jetzt die Aktualisierung des EEPROMS aus der loop ganz herausgenommen. Dadurch wird er nur 1 mal aktualisiert wenn eine Karte aufgelegt wird.
Als Basis habe ich weiterhin den Code von @4-Farben-Stift verwendet. Die Umbauten bzw Änderungen sind folgende:
Codeänderungen für shortcut letzte Karte auf PlayTaste.
Diesen Part vor der Definition der Buttons einfügen (ziemlich am Amfang des Codes)
//Letzte gespielte Karte als shortcut auf Playtaste legen
//defines für LastCard
#define folderReg 201
#define modeReg 202
#define specialReg 203
Diesen Part vor der void setup() einfügen (vor der letzten geschweiften Klammer"}" )
// Funktion für LastCard
bool ShortCutIsPlaying = false ; // Marker ob von einem Shortcut wiedergegeben wird.
bool setupPlayShortcut(folderSettings * theFolder){
theFolder->folder = EEPROM.read(folderReg);
theFolder->mode = EEPROM.read(modeReg);
theFolder->special = EEPROM.read(specialReg);
Diesen Part im void setup() einfügen. Am Ende der void playFolder() } ". Auch hier darauf achten vor der letzten geschweiften Klammer am Ende
if(ShortCutIsPlaying == false) { ; // wenn Marker "shortcut wird nicht gespielt"
EEPROM.update(folderReg,myFolder->folder); // EEPROM updaten
EEPROM.update(modeReg,myFolder->mode);
EEPROM.update(specialReg,myFolder->special);
Serial.println(F("=== EEPROM -> Folder-Update ShortCut Playtaste"));
}
ShortCutIsPlaying = false ; // Marker rücksetzen "shortcut wird gespielt"
Diesen Part anstelle des Originalparts einfügen, am Ende von voidSetup().
void playShortCut(uint8_t shortCut) {
Serial.println(F("=== playShortCut()"));
Serial.println(shortCut);
if(shortCut == 0){
setupPlayShortcut(&mySettings.shortCuts[0]); //LastCard auf Play legen
Serial.println(F("Shortcut Playtaste configured!"));
}
if (mySettings.shortCuts[shortCut].folder != 0) { // wenn ein shortcut gespeichert
myFolder = &mySettings.shortCuts[shortCut]; // aktueller Track -> Gespeichert in shortcut
ShortCutIsPlaying = true ; // Marker setzen "shortcut wird gespielt"
playFolder(); // shortcut spielen
disablestandbyTimer();
delay(1000);
}
else { // wenn kein shortcut gespeichert tue nichts
Serial.println(F("Shortcut not configured!"));
ShortCutIsPlaying = false ; // Marker setzen "Kein shortcut gespielt"
}
}
Die Aktualisierung des EEPROMS ist jetzt nicht mehr im loop und wird nur noch ausgeführt wenn ein Track von einer Karte wiedergegeben wird. Die Shortcuts inklusive Startsound werden für die Aktualisierung des EEPROMS nicht mehr berücksichtigt.
Bei mir funktioniert es gut ( DEV Version)