Autoplay deaktivieren (nach Stromausfall zB)

Hi Leute,

wisst ihr welche Zeile(n) man in der Software entfernen muss, um Autoplay zu deaktivieren?

Hintergrund: ich möchte die Box an eine schaltbare Steckdose packen, die sich nach 21h deaktiviert, und erst am nächsten Tag wieder aktiviert.
Wenn beim aktivieren (aus Sicht der Box: Strom einschalten) aber eine Karte aufliegt, dann spielt die Box sofort los.

Ich möchte aber, dass ausschließlich beim selber Karte auflegen, oder beim Play Button drücken die Box losspielt.

Denn sonst läuft hier jeden Tag beim Aktivieren der Steckdose erstmal die Karte durch. Das ist ungünstig :wink:

Danke

Das ärgert mich nun aber, ich habe den Code leider noch immer nicht verstanden.
Ich habe die Grundidee „if millis() <= 20000 {“ einzufügen, um die erste Karte zwar zu erkennen, und auch auswerten zu lassen, aber welches mp3.playFolderTrack ich damit verhindern muss ohne alles durcheinander zu bringen, weiß ich leider nicht.
Aber zumindest habe ich meine Idee kund getan und überzeuge einen Programmierer hier davon.

2 Like

Sicher, dass das eine Antwort auf meine Frage war? :thinking:

Wieso bist du der Meinung, dass sich die Anwort nicht auf dein Problem bezieht?
@raznz_snasna hat einen Ansatz vorgeschlagen, wie man das Problem angehen kann. Denn der TonUINO ist ja so programmiert, dass er auf eine aufgelegte Karte reagiert. Einfach das Erjennen der Karten deaktivieren, ist ja nicht das was du erreichen willst. Also muss man eine Bedingung finden, wann der TonUINO nicht auf Karten reagieren soll. Diese Bedingung soll aber die Nutzung nach dem Starten nicht mehr behindern. Deshalb der Vorschlag zu Beginn Karten zwar zuerkennen, aber das Abspielen zu verhindern.

2 Like

Nicht entfernen, sondern man muss Zeilen hinzufügen :wink:

Theoretisch reicht es, wenn man im void setup() eine Abfrage einbaut, welche Karte gerade aufliegt. Im void loop() muss man nochmals schauen, ob es die gleiche Karte ist. Wenn ja, spiele nichts…
Aber den Code kann ich dir spontan nicht nennen. Dazu müsste ich mich selbst erstmal einarbeiten (in die Bibliothek MRFC522.h .
Aber es gibt einige Leute hier im Forum die hier sicher gute Lösungen inkl. C-Code vorschlagen.

Das ist nichz so einfach.
Die Karte wird ja immer wieder gelesen.
Wenn man das erste lesen verhindert, reagiert die sw beim zweiten Zyklus.

Man muss also im setup() die Eventuell aufliegende Karte lesen und diese dann im normal laufenden program solange ignorieren, bis die Karte nicht mehr aufliegt.

1 Like

Man könnte auch ein Startupflag setzen, dass ein abspielen verhindert.

Deaktiviert wird das Flag, sobald keine Karte erkannt wird.

Wenn keine Karte aufliegt wird es direkt deaktiviert, ansonnsten bleibt es aktiv, solange die initale Karte aufliegt.

Dann muss man im setup() keine Karte lesen.

Edit: das falg kann man auch zusätzlich bei beliebigem Tastendruck deaktivieren
oder nur beim Playtaster.

2 Like

Auch eine interessante Idee!

Im Setup das Flag setzen und im Loop solange gesetzt lassen bis keine Karte erkannt wurde oder Playtaste gedrückt wurde.

Man kann auch im setup stecken bleiben bis die Karte weg ist, und dann erst weiterlaufen

Schleifen in denen der code fest hängt, sollten immer vermieden werden.

ich versuche mal die Anpassungen für das Flag heute Abend zu posten.

Das sollten nur vier zeilen sein.

flag setzen.
flag abfragen
flag zurücksetzen bei Karte weg
flag zurücksetzen bei druck auf play

2 Like

Hier die Anpassungen:
in Zeile 82 folgendes einfügen:

bool startupFlag = true; //deklarieren und setzen des startupFlag

zwischen Zeile 973 und 974 folgendes einfügen:

startupFlag = false; //startupFlag bei loslassen der Pausetaste auf false setzen, abspielen der aufliegenden Karte möglich

Danach sollte es so aussehen:

    if (pauseButton.wasReleased()) {
      startupFlag = false //startupFlag bei loslassen der Pausetaste auf false setzen, abspielen der aufliegenden Karte möglich
      if (activeModifier != NULL)

An dieser stelle muss das Flag zurückgesetzt werden, damit es eine fehlende Karte erkennt:
anstatt Zeile 1094

} while (!mfrc522.PICC_IsNewCardPresent());

muss folgendes eingesetzt werden;

   if (mfrc522.PICC_IsNewCardPresent()){
      break;
   }
   elseif (startupFlag == true) {
      startupFlag = false; //startupFlag bei fehlendem Tag auf false setzen, abspielen des naechsten Tags möglich
   }
 } while (true);

die jetzt nummerierte Zeile 1106 - 1110 wie folgt ändern:

 if (readCard(&myCard) == true) {
    if (myCard.cookie == cardCookie && myCard.nfcFolderSettings.folder != 0 && myCard.nfcFolderSettings.mode != 0 && startupFlag != true) {     //abfragen ob startupFlag aktiv, wenn ja wird nichts abgesielt
      playFolder();
    }

Ich habe es nur kompiliert, aber nicht getestet.
Damit wird das abspielen über die Karten erst möglich, wenn
a) die Pausetaste gedrückt und wieder los gelassen wird
b) die initiale Karte

Shortcuts sollten weiterhin direkt aktivert werden können

1 Like