Ich will jetzt nicht sagen das es unmöglich ist, es ist aber momentan nicht vorgesehen. Da wir nicht mit Magneten usw arbeiten (wie gewisse andere Boxen) finde ich es auch unglücklich wenn jedes Mal wenn die Karte etwas verrutscht und als entfernt erkannt wird die Musik stoppt…
Das ganze lässt sich nur mit Aufwand in der aktuellen Version umsetzen und da die aktuelle Position auch nicht gespeichert werden kann währe es sogar unschön im Track aufzuhören.
In des ESP32 Version mit VS1053 als Player ist es umgesetzt.
Das es im pnp cube umgesetzt is weiß ich @Dennis. Das hier ist aber nich das pnp cube Forum.
Das ganze lässt sich nur mit Aufwand in der aktuellen Version umsetzen und da die aktuelle Position auch nicht gespeichert werden kann währe es sogar unschön im Track aufzuhören.
Nur so als Gedanke was grob gemacht werden müsste…(natürlich alles ungetestet und auch nicht vollständig)
die do-while in der “void loop() {…}” muss geändert werden von:
do {
.....
// Ende der Buttons
} while (!mfrc522.PICC_IsNewCardPresent());
zum Bsp. zu:
do {
.....
// Ende der Buttons
} while (!cardRemoved);
zusätzlich braucht man folgende Funktionen
bool cardRemoved() {
//über millis() nur alle zwei Sekunden oder so ausführen.
if(millis() - previousMillis > 2000)
{
previousMillis =millis();
mfrc522.PICC_WakeupA();
if(oldUID !=getID()) return true;
else return false;
}
}
unsigned long getID(){
if ( ! mfrc522.PICC_ReadCardSerial()) { //Since a PICC placed get Serial and continue
return -1;
}
unsigned long hex_num;
hex_num = mfrc522.uid.uidByte[0] << 24;
hex_num += mfrc522.uid.uidByte[1] << 16;
hex_num += mfrc522.uid.uidByte[2] << 8;
hex_num += mfrc522.uid.uidByte[3];
mfrc522.PICC_HaltA(); // Stop reading
return hex_num;
}
dann muss natürlich auch noch alles hinter der do{…}while(…) angepasst werden da dieser Teil sonst ständig durchlaufen wird wenn keine Karte aufgelegt ist. Dann müsste die UID einer eingelesenen Karte gespeichert werden “oldUID”, im Moment wird ja nur der Magic Cookie ausgewertet und bestimmt noch einiges was Ich vergessen habe.
Außerdem muss die Karte noch schlafen geschickt und wieder aufgeweckt werden.
Und ein “Problem” entsteht wenn die Karten eine längere UID haben, wie zum Beispiel die NTAGs.
Ich habe in einem anderen Projekt mal sowas gesehen:
uint8_t control = 0x00;
do {
control = 0;
for (int i = 0; i < 3; i++) {
if (!mfrc522.PICC_IsNewCardPresent()) {
if (mfrc522.PICC_ReadCardSerial()) {
control |= 0x16;
}
if (mfrc522.PICC_ReadCardSerial()) {
control |= 0x16;
}
control += 0x1;
}
control += 0x4;
}
delay(0);
} while (control == 13 || control == 14);
reconnect();
Serial.println("Removed");
client.publish("SmartHome/TestRaum/RFID", "REMOVED");
delay(500);
mfrc522.PICC_HaltA();
mfrc522.PCD_StopCrypto1();
}