So, jetzt läuft es soweit.
In der zuletzt geposteten Version hat noch die Zeile
„knownCard = false;“ gefehlt; ohne die funktioniert das voiceMenu nicht richtig.
Ich verwende den aktuellen folder als Ausgangswert fürs voiceMenu.
So kann man einfach nur einen Ordner rauf oder runter springen.
Und das Ganze funktioniert nur, wenn bereits ein Titel spielt; ansonsten hängt sich alles auf.
Aktuell habe ich es abgefangen und breche ab, falls gerade nichts spielt.
Kann mir jemand erklären, warum das in diesem Zustand nicht funktioniert, bzw. welche Werte ich setzen müsste um das zu beheben?
Mein Programmierstil fällt wohl eher unter „quick and dirty“, nehmt es mir bitte nicht übel.
Ich poste mein Gebastel trotzdem; vielleicht taugt es ja als Ausgangsbasis für eine eventuelle Übernahme der Funktion in den Standard.
Basis ist die DEV, heruntergeladen am 06.04.2020. Die Zeilenangaben beziehen sich auf die unveränderte DEV Version, also am besten von hinten nach vorne einfügen.
Hier die Änderungen:
Vor „bool knownCard = false;“ (Zeile 81) einzufügen:
//cardlessPlay Beginn
void cardlessPlay(bool fromCard = false);
//cardlessPlay Ende
Vor „if (pauseButton.wasReleased()) {
if (activeModifier != NULL) (…)“
(Zeile 967) einzufügen:
//cardlessPlay Beginn
//Zugang zum VoiceMenü über up&down lang drücken
if ((upButton.pressedFor(LONG_PRESS) || downButton.pressedFor(LONG_PRESS)) && upButton.isPressed() && downButton.isPressed()) {
//cardlessPlay funktioniert nur, wenn bereits ein Titel läuft. Sonst hängt sich alles auf.
//Daher abfangen
if (!isPlaying()) {
Serial.println(F("Spielt nicht, Abbruch!"));
break;
}
mp3.pause();
do {
readButtons();
} while (upButton.isPressed() || downButton.isPressed());
readButtons();
Serial.println(F("Ordnerauswahl über Tasten UP/DOWN"));
delay(500);
cardlessPlay();
break;
}
//cardlessPlay Ende
Vor "void adminMenu(bool fromCard = false) { " (Zeile1111) einzufügen:
//cardlessPlay Beginn
void cardlessPlay(bool fromCard = false) {
disablestandbyTimer();
uint8_t lastFolder;
mp3.pause();
Serial.println(F("=== cardlessPlay()"));
knownCard = false;
lastFolder = myFolder->folder;
//Auf Album Modus schalten
Serial.println(F("Jetzt umstellen auf Album Modus"));
myFolder->mode = 2;
//Voice Menü: Ordner zum Abspielen wählen und als aktuellen Ordner übernehmen
myFolder->folder = voiceMenu(99, 301, 0, true, 0, lastFolder, true);
if (myFolder->folder == 0) return false;
Serial.print(F(" nach Voice Menü "));
Serial.println(myFolder->folder);
playFolder();
setstandbyTimer();
}
//cardlessPlay Ende