So, hatte einige Denkfehler durch mangelndes Wissen, aber jetzt habe ich eine Lösung gefunden, die tatsächlich (auf meinem reduzierten Testaufbau) bisher anstandslos funktioniert.
Für erfahrene Programmierer ist mein Code möglicherweise ein Graus, aber ich möchte meine Änderungen zur original DEV trotzdem hier einmal posten.
Danke nochmal an @marco-117!
Meine Änderungen:
unter Zeile 37 einfügen:
uint8_t special3;
unter Zeile 578 einfügen:
if (myFolder->mode == 10) {
if (currentTrack != numTracksInFolder) {
currentTrack = currentTrack + 1;
Serial.print(F("Hörbuch Modus ist aktiv -> nächster Track und "
"Fortschritt speichern"));
Serial.println(currentTrack);
mp3.playFolderTrack16(myFolder->folder, currentTrack);
// Fortschritt im EEPROM abspeichern
writeLargeTrack (myFolder->folder, currentTrack, myFolder->special3);
} else {
// mp3.sleep(); // Je nach Modul kommt es nicht mehr zurück aus dem Sleep!
// Fortschritt zurück setzen
EEPROM.update(myFolder->folder, 0);
setstandbyTimer();
}
}
unter Zeile 621 einfügen:
if (myFolder->mode == 10) {
Serial.println(F("Hörbuch Modus ist aktiv -> vorheriger Track und "
"Fortschritt speichern"));
if (currentTrack != 1) {
currentTrack = currentTrack - 1;
}
mp3.playFolderTrack16(myFolder->folder, currentTrack);
// Fortschritt im EEPROM abspeichern
writeLargeTrack (myFolder->folder, currentTrack, myFolder->special3);
}
unter Zeile 927 einfügen:
if (myFolder->mode == 10) {
Serial.println(F("Spezialmodus Big-Folder: Hörbuch-> kompletten Big-Folder spielen und "
"Fortschritt merken"));
int a = EEPROM.read(myFolder->folder);
if (a==255) {
int b = readLargeTrack(myFolder->folder, myFolder->special3);
currentTrack = a + b;
}
else currentTrack = a;
if (currentTrack == 0 || currentTrack > numTracksInFolder) {
currentTrack = 1;
}
mp3.playFolderTrack16(myFolder->folder, currentTrack);
}
Zeilen 1251 bis 1254 ersetzen mit:
uint8_t special = voiceMenu(mp3.getFolderTrackCount(tempCard.nfcFolderSettings.folder), 341, 0,
true, tempCard.nfcFolderSettings.folder);
uint8_t special2 = voiceMenu(mp3.getFolderTrackCount(tempCard.nfcFolderSettings.folder), 342, 0,
true, tempCard.nfcFolderSettings.folder, special);
Zeile 1342 ersetzen mit:
uint8_t readLargeTrack (uint8_t folder, uint8_t memorySpace) {
return EEPROM.read(folder + (255*memorySpace));
}
void writeLargeTrack (uint8_t folder, uint8_t track, uint8_t memorySpace) {
if (currentTrack < 255) {
EEPROM.update(myFolder->folder, currentTrack);
}
if (currentTrack > 255) {
EEPROM.update(myFolder->folder, 255);
EEPROM.update(folder + (255*memorySpace), currentTrack-255);
}
if (currentTrack == 255) {
EEPROM.update(myFolder->folder, currentTrack);
EEPROM.update(folder + (255*memorySpace), 0);
}
}
Zeile 1471 ersetzen mit:
theFolder->mode = voiceMenu(10, 310, 310, false, 0, 0, true);
Zeile 1479 ersetzen mit:
theFolder->special = voiceMenu(mp3.getFolderTrackCount(theFolder->folder), 340, 0,
Zeilen 1489 bis 1492 ersetzen mit:
theFolder->special = voiceMenu(mp3.getFolderTrackCount(theFolder->folder), 341, 0,
true, theFolder->folder);
theFolder->special2 = voiceMenu(mp3.getFolderTrackCount(theFolder->folder), 342, 0,
true, theFolder->folder, theFolder->special);
unter Zeile 1493 einfügen:
if (theFolder->mode == 10) {
theFolder->special3 = true;
}
unter Zeile 1623 einfügen:
tempCard.nfcFolderSettings.special3 = buffer[9];
Zeile 1703 ersetzen mit:
nfcTag.nfcFolderSettings.special3,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00
Im Ordner mp3 durchzufühern:
320_select_file.mp3 in 340_select_file.mp3 umbenennen
321_select_first_file.mp3 in 341_select_first_file.mp3 umbennen
322_select_last_file.mp3 in 342_select_last_file.mp3 umbenennen
neue Datei 320.mp3 erstellen (zur Auswahl des neuen Modus „Hörbuch mit mehr als 255 Dateien und Fortschritt speichern“)
Ich werde noch weiter testen, ob auch der reguläre Aufbau reagiert wie gewünscht.
Edit2: Habe nach Tests auf meinem „regulären Aufbau“ den Code nochmal angepasst.