1
0
mirror of https://github.com/xfjx/TonUINO.git synced 2025-08-26 22:14:33 +02:00
This commit is contained in:
Thorsten Voß
2018-09-16 23:17:13 +02:00
parent 2dd3196705
commit d36ffa9658

View File

@@ -8,7 +8,7 @@
// DFPlayer Mini
SoftwareSerial mySoftwareSerial(2, 3); // RX, TX
uint16_t numTracksInFolder;
uint16_t track;
uint16_t currentTrack;
// this object stores nfc tag data
struct nfcTagObject {
@@ -21,7 +21,7 @@ struct nfcTagObject {
nfcTagObject myCard;
static void nextTrack();
static void nextTrack(uint16_t track);
int voiceMenu(int numberOfOptions, int startMessage, int messageOffset,
bool preview = false, int previewFromFolder = 0);
@@ -42,7 +42,7 @@ public:
Serial.print("Track beendet");
Serial.println(track);
delay(100);
nextTrack();
nextTrack(track);
}
static void OnCardOnline(uint16_t code) {
Serial.println(F("SD Karte online "));
@@ -58,8 +58,15 @@ public:
static DFMiniMp3<SoftwareSerial, Mp3Notify> mp3(mySoftwareSerial);
// Leider kann das Modul keine Queue abspielen.
static void nextTrack() {
if (knownCard == false)
static uint16_t _lastTrackFinished;
static void nextTrack(uint16_t track) {
if (track == _lastTrackFinished) {
Serial.println("DFPlayer mit buggy Firmware - doppelter Callback ignoriert");
return;
}
_lastTrackFinished = track;
if (knownCard == false)
// Wenn eine neue Karte angelernt wird soll das Ende eines Tracks nicht
// verarbeitet werden
return;
@@ -69,69 +76,70 @@ static void nextTrack() {
mp3.sleep();
}
if (myCard.mode == 2) {
if (track != numTracksInFolder) {
track = track + 1;
mp3.playFolderTrack(myCard.folder, track);
if (currentTrack != numTracksInFolder) {
currentTrack = currentTrack + 1;
mp3.playFolderTrack(myCard.folder, currentTrack);
Serial.print(F("Albummodus ist aktiv -> nächster Track: "));
Serial.print(track);
Serial.print(currentTrack);
} else
mp3.sleep();
}
if (myCard.mode == 3) {
track = random(1, numTracksInFolder + 1);
currentTrack = random(1, numTracksInFolder + 1);
Serial.print(F("Party Modus ist aktiv -> zufälligen Track spielen: "));
Serial.println(track);
mp3.playFolderTrack(myCard.folder, track);
Serial.println(currentTrack);
mp3.playFolderTrack(myCard.folder, currentTrack);
}
if (myCard.mode == 4) {
Serial.println(F("Einzel Modus aktiv -> Strom sparen"));
mp3.sleep();
}
if (myCard.mode == 5) {
if (track != numTracksInFolder) {
track = track + 1;
if (currentTrack != numTracksInFolder) {
currentTrack = currentTrack + 1;
Serial.print(F("Hörbuch Modus ist aktiv -> nächster Track und "
"Fortschritt speichern"));
Serial.println(track);
mp3.playFolderTrack(myCard.folder, track);
Serial.println(currentTrack);
mp3.playFolderTrack(myCard.folder, currentTrack);
// Fortschritt im EEPROM abspeichern
EEPROM.write(myCard.folder, track);
} else
EEPROM.write(myCard.folder, currentTrack);
} else {
mp3.sleep();
// Fortschritt zurück setzen
EEPROM.write(myCard.folder, 1);
}
}
}
static void previousTrack() {
if (myCard.mode == 1) {
Serial.println(F("Hörspielmodus ist aktiv -> Track von vorne spielen"));
mp3.playFolderTrack(myCard.folder, track);
mp3.playFolderTrack(myCard.folder, currentTrack);
}
if (myCard.mode == 2) {
Serial.println(F("Albummodus ist aktiv -> vorheriger Track"));
if (track != 1) {
track = track - 1;
if (currentTrack != 1) {
currentTrack = currentTrack - 1;
}
mp3.playFolderTrack(myCard.folder, track);
mp3.playFolderTrack(myCard.folder, currentTrack);
}
if (myCard.mode == 3) {
Serial.println(F("Party Modus ist aktiv -> Track von vorne spielen"));
mp3.playFolderTrack(myCard.folder, track);
mp3.playFolderTrack(myCard.folder, currentTrack);
}
if (myCard.mode == 4) {
Serial.println(F("Einzel Modus aktiv -> Track von vorne spielen"));
mp3.playFolderTrack(myCard.folder, track);
mp3.playFolderTrack(myCard.folder, currentTrack);
}
if (myCard.mode == 5) {
Serial.println(F("Hörbuch Modus ist aktiv -> vorheriger Track und "
"Fortschritt speichern"));
if (track != 1) {
track = track - 1;
if (currentTrack != 1) {
currentTrack = currentTrack - 1;
}
mp3.playFolderTrack(myCard.folder, track);
mp3.playFolderTrack(myCard.folder, currentTrack);
// Fortschritt im EEPROM abspeichern
EEPROM.write(myCard.folder, track);
EEPROM.write(myCard.folder, currentTrack);
}
}
@@ -183,9 +191,8 @@ void setup() {
// DFPlayer Mini initialisieren
mp3.begin();
mp3.reset();
mp3.setVolume(15);
// NFC Leser initialisieren
SPI.begin(); // Init SPI bus
mfrc522.PCD_Init(); // Init MFRC522
@@ -226,7 +233,7 @@ void loop() {
} else if (pauseButton.pressedFor(LONG_PRESS) &&
ignorePauseButton == false) {
if (isPlaying())
mp3.playAdvertisement(track);
mp3.playAdvertisement(currentTrack);
else {
knownCard = false;
mp3.playMp3FolderTrack(800);
@@ -244,7 +251,7 @@ void loop() {
ignoreUpButton = true;
} else if (upButton.wasReleased()) {
if (!ignoreUpButton)
nextTrack();
nextTrack(currentTrack);
else
ignoreUpButton = false;
}
@@ -276,36 +283,36 @@ void loop() {
// Hörspielmodus: eine zufällige Datei aus dem Ordner
if (myCard.mode == 1) {
Serial.println(F("Hörspielmodus -> zufälligen Track wiedergeben"));
track = random(1, numTracksInFolder + 1);
Serial.println(track);
mp3.playFolderTrack(myCard.folder, track);
currentTrack = random(1, numTracksInFolder + 1);
Serial.println(currentTrack);
mp3.playFolderTrack(myCard.folder, currentTrack);
}
// Album Modus: kompletten Ordner spielen
if (myCard.mode == 2) {
Serial.println(F("Album Modus -> kompletten Ordner wiedergeben"));
track = 1;
mp3.playFolderTrack(myCard.folder, track);
currentTrack = 1;
mp3.playFolderTrack(myCard.folder, currentTrack);
}
// Party Modus: Ordner in zufälliger Reihenfolge
if (myCard.mode == 3) {
Serial.println(
F("Party Modus -> Ordner in zufälliger Reihenfolge wiedergeben"));
track = random(1, numTracksInFolder + 1);
mp3.playFolderTrack(myCard.folder, track);
currentTrack = random(1, numTracksInFolder + 1);
mp3.playFolderTrack(myCard.folder, currentTrack);
}
// Einzel Modus: eine Datei aus dem Ordner abspielen
if (myCard.mode == 4) {
Serial.println(
F("Einzel Modus -> eine Datei aus dem Odrdner abspielen"));
track = myCard.special;
mp3.playFolderTrack(myCard.folder, track);
currentTrack = myCard.special;
mp3.playFolderTrack(myCard.folder, currentTrack);
}
// Hörbuch Modus: kompletten Ordner spielen und Fortschritt merken
if (myCard.mode == 5) {
Serial.println(F("Hörbuch Modus -> kompletten Ordner spielen und "
"Fortschritt merken"));
track = EEPROM.read(myCard.folder);
mp3.playFolderTrack(myCard.folder, track);
currentTrack = EEPROM.read(myCard.folder);
mp3.playFolderTrack(myCard.folder, currentTrack);
}
}
@@ -560,4 +567,3 @@ void dump_byte_array(byte *buffer, byte bufferSize) {
Serial.print(buffer[i], HEX);
}
}