Hallo @Manuel , auch für @stephan und @marco-117
Ich habe es jetzt am laufen. Manus Ansatz war prinzipiell richtig. Ein paar Änderungen waren aber trotzdem nötig um es ans laufen zu bringen. Das Adminmenü verhält sich jetzt wie gewünscht. Ist es aktiviert und es wird keine weitere Taste zur Auswahl einer Option gedrückt wird das Adminmenü automatisch nach 5 Minuten verlassen und der Standbytimer gestartet. Das gilt auch in den Untermenüs des Adminmenüs. Sowie eine Taste gedrückt wurde, wird der Countdown für den AdmTimeOut neu gestartet und die Timeoutzeit beginnt neu.
Hier der Code
mp3.playMp3FolderTrack(startMessage);
Serial.print(F("=== voiceMenu() ("));
Serial.print(numberOfOptions);
Serial.println(F(" Options)"));
unsigned long AdmTimeOut = 0;
unsigned long SollAdmTimeOut = 5*60000; // Vorgabe der AdmTimeOut Zeit in millisekunden , Die 5 ist dieZeit in Minuten
AdmTimeOut = millis();
Serial.print(F("AdmTimeOut :"));
Serial.println(SollAdmTimeOut);
do
{
//Serial.println((millis() - AdmTimeOut));
if((millis() - AdmTimeOut) >= SollAdmTimeOut)
{
Serial.println(F("TimeOut"));
mp3.playMp3FolderTrack(802); //802- "OK, ich habe den Vorgang abgebrochen.
//ignorePauseButton = true;
setstandbyTimer();
return defaultValue;
}
if (Serial.available() > 0)
{
int optionSerial = Serial.parseInt();
if (optionSerial != 0 && optionSerial <= numberOfOptions)
return optionSerial;
}
readButtons();
In den readButtons muss die Variable bei drücken einer Taste auf den neuen millis() wert gesetzt werden um den TimeOut neu zu starten.
readButtons();
mp3.loop();
if (pauseButton.pressedFor(LONG_PRESS)) // Abbruch
{
mp3.playMp3FolderTrack(802); //802- "OK, ich habe den Vorgang abgebrochen.
ignorePauseButton = true;
setstandbyTimer();
return defaultValue;
}
if (pauseButton.wasReleased())
{
if (returnValue != 0)
{
AdmTimeOut = millis();
Serial.print(F("=== "));
Serial.print(returnValue);
Serial.println(F(" ==="));
return returnValue;
}
delay(1000);
}
if (upButton.pressedFor(LONG_PRESS))
{
AdmTimeOut = millis();
returnValue = min(returnValue + 10, numberOfOptions); // 10 Schritte hoch
Serial.println(returnValue);
mp3.pause();
mp3.playMp3FolderTrack(messageOffset + returnValue);
waitForTrackToFinish();
//************preview 10-er Schritt** vorwärts **************
if (preview)
{
if (previewFromFolder == 0)
mp3.playFolderTrack(returnValue, 1);
else
mp3.playFolderTrack(previewFromFolder, returnValue);
}
ignoreUpButton = true;
}
else if (upButton.wasReleased())
{
AdmTimeOut = millis();
if (!ignoreUpButton)
{
returnValue = min(returnValue + 1, numberOfOptions);
Serial.println(returnValue);
mp3.pause();
mp3.playMp3FolderTrack(messageOffset + returnValue);
if (preview)
{
waitForTrackToFinish();
if (previewFromFolder == 0)
{
mp3.playFolderTrack(returnValue, 1);
}
else
{
mp3.playFolderTrack(previewFromFolder, returnValue);
}
delay(1000);
}
}
else
{
ignoreUpButton = false;
}
}
if (downButton.pressedFor(LONG_PRESS))
{
AdmTimeOut = millis();
returnValue = max(returnValue - 10, 1); // 10 Schritte zurück
Serial.println(returnValue);
mp3.pause();
mp3.playMp3FolderTrack(messageOffset + returnValue);
waitForTrackToFinish();
//************preview 10-er Schritt* zurück ***************
if (preview)
{
if (previewFromFolder == 0)
mp3.playFolderTrack(returnValue, 1);
else
mp3.playFolderTrack(previewFromFolder, returnValue);
}
ignoreDownButton = true;
}
else if (downButton.wasReleased())
{
AdmTimeOut = millis();
if (!ignoreDownButton)
{
returnValue = max(returnValue - 1, 1);
Serial.println(returnValue);
mp3.pause();
mp3.playMp3FolderTrack(messageOffset + returnValue);
if (preview)
{
waitForTrackToFinish();
if (previewFromFolder == 0)
{
mp3.playFolderTrack(returnValue, 1);
}
else
{
mp3.playFolderTrack(previewFromFolder, returnValue);
}
delay(1000);
}
}
else
{
ignoreDownButton = false;
}
}
} while (true);
}
Das funktioniert so.