So, fange dann mal an
Ich hoffe ich vergesse nichts! Habe bisher nur den reinen „Abspiel-Betrieb“ ohne Modifier oder sonstiges getestet!
Zeilenangaben beziehen auf die main-Version heruntergeladen am 11.01.2021 14:24 Uhr.
in:
struct folderSettings {
-
unter:
uint8_t special2;
(Zeile37)
einfügen:
uint8_t audiobookMem;
-
nach:
struct adminSettings { ... };
einfügen:
static bool hasCard = false;
static byte lastCardUid[4];
static byte retries;
static bool lastCardWasUL;
static bool forgetLastCard=false;
const byte PCS_NO_CHANGE = 0; // no change detected since last pollCard() call
const byte PCS_NEW_CARD = 1; // card with new UID detected (had no card or other card before)
const byte PCS_CARD_GONE = 2; // card is not reachable anymore
const byte PCS_CARD_IS_BACK = 3; // card was gone, and is now back again
in:
static void nextTrack(uint16_t track) {
- nach:
EEPROM.update(myFolder->folder, 1);
(Zeile 580)
einfügen:
forgetLastCard=true;
- vor:
delay(500);
(Zeile 584)
einfügen:
//Anfang_neu_Hörbuch-von-bis
if (myFolder->mode == 10) {
if (currentTrack != numTracksInFolder) {
currentTrack = currentTrack + 1;
Serial.println(F("Hörbuch Modus -> nächster Track und Fortschritt speichern"));
Serial.println(currentTrack);
mp3.playFolderTrack(myFolder->folder, currentTrack);
// Fortschritt auf Karte abspeichern
writeAudiobookMemory2RFID (currentTrack);
} else {
// Fortschritt zurück setzen
writeAudiobookMemory2RFID (0);
forgetLastCard=true;
setstandbyTimer();
}
}
//Ende_neu_Hörbuch-von-bis
in:
static void previousTrack() {
vor:
delay(1000);
(Zeile 627)
einfügen:
//Anfang_neu_Hörbuch-von-bis
if (myFolder->mode == 10) {
Serial.println(F("Hörbuch Modus -> vorheriger Track und Fortschritt speichern"));
if (currentTrack != firstTrack) {
currentTrack = currentTrack - 1;
}
Serial.println(currentTrack);
mp3.playFolderTrack(myFolder->folder, currentTrack);
// Fortschritt auf Karte abspeichern
writeAudiobookMemory2RFID (currentTrack);
}
in:
void playFolder() {
vor:
}
(Zeile 933)
einfügen:
//Anfang_neu_Hörbuch-von-bis: definierten Bereich eines Ordners wiedergeben und Fortschritt merken
if (myFolder->mode == 10) {
Serial.println(
F("Spezialmodus Von-Bis: Hörbuch -> definierten Bereich eines Ordners wiedergeben und Fortschritt merken"));
Serial.print(myFolder->special);
Serial.print(F(" bis "));
Serial.println(myFolder->special2);
numTracksInFolder = myFolder->special2;
firstTrack = myFolder->special;
currentTrack = myFolder->audioBookMem;
if (currentTrack < firstTrack || currentTrack >= firstTrack + numTracksInFolder) {
currentTrack = firstTrack;
}
mp3.playFolderTrack(myFolder->folder, currentTrack);
}
//Ende_neu_Hörbuch-von-bis
nach:
void playShortCut(uint8_t shortCut) { ... }
vor:
void loop() {
(Zeile 948)
einfügen:
// Um festzustellen ob eine Karte entfernt wurde, muss der MFRC regelmäßig ausgelesen werden
byte pollCard()
{
const byte maxRetries = 2;
if (!hasCard)
{
if (mfrc522.PICC_IsNewCardPresent())
{
if (mfrc522.PICC_ReadCardSerial())
{
Serial.print(F("ReadRFIDSerial done"));
if (readCard(&myCard))
{
bool bSameUID = !memcmp(lastCardUid, mfrc522.uid.uidByte, 4);
if (bSameUID) {
Serial.println(F("Same RFID"));
}
else {
Serial.println(F("New RFID"));
}
// store info about current card
memcpy(lastCardUid, mfrc522.uid.uidByte, 4);
lastCardWasUL = mfrc522.PICC_GetType(mfrc522.uid.sak) == MFRC522::PICC_TYPE_MIFARE_UL;
retries = maxRetries;
hasCard = true;
return bSameUID ? PCS_CARD_IS_BACK : PCS_NEW_CARD;
}
else // readCard war nicht erfolgreich
{
mfrc522.PICC_HaltA();
mfrc522.PCD_StopCrypto1();
Serial.println(F("RFID konnte nicht gelesen werden"));
}
}
}
return PCS_NO_CHANGE;
}
else // hasCard
{
// perform a dummy read command just to see whether the card is in range
byte buffer[18];
byte size = sizeof(buffer);
if (mfrc522.MIFARE_Read(lastCardWasUL ? 8 : blockAddr, buffer, &size) != MFRC522::STATUS_OK)
{
if (retries > 0)
{
retries--;
}
else
{
Serial.println(F("No RFID!"));
mfrc522.PICC_HaltA();
mfrc522.PCD_StopCrypto1();
hasCard = false;
return PCS_CARD_GONE;
}
}
else
{
retries = maxRetries;
}
}
return PCS_NO_CHANGE;
}
void handleCardReader()
{
// poll card only every 100ms
static uint8_t lastCardPoll = 0;
uint8_t now = millis();
if (static_cast<uint8_t>(now - lastCardPoll) > 100)
{
lastCardPoll = now;
switch (pollCard())
{
case PCS_NEW_CARD:
onNewCard();
break;
case PCS_CARD_GONE:
break;
case PCS_CARD_IS_BACK:
if (!isPlaying())
{
// nur weiterspielen wenn vorher nicht konfiguriert wurde
if (!forgetLastCard)
{
mp3.start();
disablestandbyTimer();
}
else
{
onNewCard();
}
}
break;
}
}
}
in der
void loop() {
entfernen:
do {
(Zeile 949)
ersetzen:
break;
(Zeile 970)
durch:
return;
ersetzen: (ab Zeile 1000)
// Spezialmodus Von-Bis für Album und Party gibt die Dateinummer relativ zur Startposition wieder
if (myFolder->mode == 8 || myFolder->mode == 9) {
advertTrack = advertTrack - myFolder->special + 1;
}
mp3.playAdvertisement(advertTrack);
durch:
//neu_Anfang_Hörbuch-von-bis
// Spezialmodi Von-Bis für Album, Party und Hörbuch gibt die Dateinummer relativ zur Startposition wieder
if (myFolder->mode == 8 || myFolder->mode == 9 || myFolder->mode == 10) {
advertTrack = advertTrack - myFolder->special + 1;
}
mp3.playAdvertisement(advertTrack);
//neu_Ende_Hörbuch-von-bis
nach:
// Ende der Buttons
(Zeile 1092)
ersetzen: (ab Zeile 1093)
} while (!mfrc522.PICC_IsNewCardPresent());
// RFID Karte wurde aufgelegt
if (!mfrc522.PICC_ReadCardSerial())
return;
if (readCard(&myCard) == true) {
durch:
handleCardReader();
}
void onNewCard()
{
forgetLastCard=false;
// make random a little bit more "random"
randomSeed(millis() + random(1000));
löschen: (ab Zeile 1113)
mfrc522.PICC_HaltA();
mfrc522.PCD_StopCrypto1();
}
nach:
void adminMenu (bool fromCard = false) {
(Zeile 1117)
einfügen:
forgetLastCard=true;
in:
else if (subMenu == 9) {
(Zeile 1248)
ersetzen: ab (Zeile 1256)
uint8_t special = voiceMenu(mp3.getFolderTrackCount(tempCard.nfcFolderSettings.folder), 321, 0,
true, tempCard.nfcFolderSettings.folder);
uint8_t special2 = voiceMenu(mp3.getFolderTrackCount(tempCard.nfcFolderSettings.folder), 322, 0,
true, tempCard.nfcFolderSettings.folder, special);
durch:
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);
vor: (Zeile 1348)
uint8_t voiceMenu(int numberOfOptions, int startMessage, int messageOffset, bool preview = false, int previewFromFolder = 0, int defaultValue = 0, bool exitWithLongPress = false) {
einfügen:
void writeAudiobookMemory2RFID (uint8_t mem) {
nfcTagObject audioBookMem2Card;
audioBookMem2Card.nfcFolderSettings.folder = myFolder->folder;
audioBookMem2Card.nfcFolderSettings.mode = myFolder->mode;
audioBookMem2Card.nfcFolderSettings.special = myFolder->special;
audioBookMem2Card.nfcFolderSettings.special2 = myFolder->special2;
audioBookMem2Card.nfcFolderSettings.audioBookMem = mem;
mp3.pause();
do {
} while (isPlaying());
writeCard(audioBookMem2Card);
}
unter:
// Wiedergabemodus abfragen (Zeile 1475)
ersetzen:
theFolder->mode = voiceMenu(9, 310, 310, false, 0, 0, true);
durch:
theFolder->mode = voiceMenu(10, 310, 310, false, 0, 0, true);
unter:
if (theFolder->mode == 4)
(Zeile 1483)
ersetzen:
theFolder->special = voiceMenu(mp3.getFolderTrackCount(theFolder->folder), 320, 0,
true, theFolder->folder);
durch:
theFolder->special = voiceMenu(mp3.getFolderTrackCount(theFolder->folder), 340, 0, true, theFolder->folder);
unter:
// Spezialmodus Von-Bis (Zeile 1492)
ersetzen:
if (theFolder->mode == 7 || theFolder->mode == 8 || theFolder->mode == 9) {
theFolder->special = voiceMenu(mp3.getFolderTrackCount(theFolder->folder), 321, 0,
true, theFolder->folder);
theFolder->special2 = voiceMenu(mp3.getFolderTrackCount(theFolder->folder), 322, 0,
true, theFolder->folder, theFolder->special);
}
durch:
if (theFolder->mode == 7 || theFolder->mode == 8 || theFolder->mode == 9 || theFolder->mode == 10) {
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);
}
// Speicherplatz Hörbuch-von-bis
if (theFolder->mode == 10) {
theFolder->audioBookMem = 0;
}
unter:
writeCard(newCard);
(Zeile 1512)
einfügen:
forgetLastCard=true;
unter:
tempCard.nfcFolderSettings.special2 = buffer[8];
(Zeile 1628)
einfügen:
tempCard.nfcFolderSettings.audioBookMem = buffer[9];
unter: (Zeile 1651 + 1652)
mp3.pause();
}
einfügen:
mfrc522.PICC_HaltA();
mfrc522.PCD_StopCrypto1();
ersetzen:
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
(Zeile 1708)
mit:
nfcTag.nfcFolderSettings.audioBookMem,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00
mp3-Dateien wg. neuem Modus umbenennen 320 in 340 321 in 341 und 322 in 342
neue mp3 erstellen 320 „Hörbuch von-bis und Fortschritt auf Karte speichern“
Ich nutze von der mcgreg Erweiterung nur die regelmäßige Leser-Abfrage, die Möglichkeit, die Wiedergabe bei Entfernen der Karte zu stoppen ist so nicht mit dabei. Vermutlich ginge diese Abfrage auch ewas schlanker im Code, aber das übersteigt meine Fähigkeiten.
Und der neue Modus 10 ist, wie schon gesagt, bei marco-117 entnommen.