Idee für neuen Modus: Interaktives Hörbuch?

@pit: Du hast eine PC-Software zum Bespielen der Karten geschrieben? Nutzt die einen beliebigen separaten RFID-Reader/Writer? Kannst Du die Software hier allen zur Verfügung stellen?

Es ist hier im Forum bereits eine Android-App verlinkt, um komfortabler Karten zu beschreiben, die ich aber nicht testen konnte (wg. altem Handy mit Android 6).

Zusätzlicher Speicher per SPI wäre wohl etwas Overkill. Natürlich ginge ESP32-VS1053, aber ich denke, wenn man das Programmieren der Karten über PC oder APP machen kann, ist das Ganze auch mit normaler TonUINO-Hardware gut machbar.

Der Code für den neuen Mode wäre meines Erachtens wohl überschaubar und sprengt die Kapazität des Arduino Nano wohl kaum. Man müsste im Wesentlichen ja nur die Funktionen nextTrack() und previousTrack() um den neuen Modus erweitern. Am Ende eines jeden Tracks müsste dann (direkt in der MP3-Datei) nur angesagt werden, welche Handlungsoption mit der linken und welche mit der rechten Taste gewählt wird. Neben der Standardfunktion, einen von zwei möglichen Folgetracks auszuwählen, könnte man auch leicht ein paar Sonderfunktionen integrieren:

Angenommen, für jeden der bis zu 255 Tracks N werden auf der Karte zwei Nachfolger N1, N2 eingetragen. Das benötigt dann 2*255 = 510 Bytes auf der RFID-Karte, was ja bei den Mifare Classic 1k noch verfügbar ist. Da die Nachfolger zu einem Track N nie 0 (denn den Track gibt es nicht) und nie der Track N selber sein werden, kann man dies nun für Sonderfunktionen nutzen. Mein Vorschlag:

  • N1 = N2 = N:
    Das Hörspiel ist zuende. Es gibt keinen Folgetrack.
  • 0 < N1 != N, 0 < N2 != N:
    Standardfall: Es gibt zwei mögliche Folgetracks N1 und N2, die mit den Tasten Previous und Next angewählt werden können. Wenn N1 = N2, gibt es nur einen Nachfolgetrack, der durch beliebigen Tastendruck startet.
  • 0 < N1 != N, N2 = N:
    Es gibt nur einen Nachfolgetrack, nämlich N1. Dieser wird automatisch ohne Tastendruck gestartet.
  • N1 = N, 0 < N2 != N:
    Zunächst wird nach Track N auch Track (N+1) abgespielt (ohne nötigen Tastendruck). Danach gibt es nicht die Auswahl zwischen zwei, sondern zwischen drei Nachfolgetracks (nämlich N2 und die für (N+1) definierten Nachfolger). Dazu wird auch die Play/Pause-Taste abgefragt.
  • N1 = N2 = 0:
    Als nächster Track wird (ohne separaten Tastendruck) per Zufall Track (N+1) oder Track (N+2) gewählt.
  • N1 = 0, N2 > 0:
    Eine Ablauf-Bitvariable (die beim Start des Hörspiels auf 0 gesetzt wird) wird mit den in N2 gesetzten Masken-Bits per XOR verknüpft. Damit lassen sich Variablen setzen, die später über den weiteren Ablauf entscheiden. Beispielsweise können im Laufe der Geschichte bei bestimmten Verläufen eingesammelte (oder später auch wieder verlorene) Items den weiteren Ablauf beeinflussen. Als nächster Track wird (ohne separaten Tastendruck) Track (N+1) abgespielt.
  • N1 > 0, N2 = 0:
    Die in N1 gesetzten Bits der Ablauf-Bitvariable werden genommen und entsprechend wird einer der auf N folgenden Tracks (N+1), (N+2), … als Folgetrack ausgewählt (z.B: bei zwei gesetzten Bits in N1 wird entsprechend der Werte an diesen Positionen von der Ablauf-Bitvariablen eines der Tracks (N+1),…,(N+4) angewählt. Damit lassen sich vom bisherigen Ablauf abhängige Wege umsetzen.

Damit kann man mit vergleichsweise wenig Code sehr komplexe Handlungsabläufe definieren, deutlich mehr als bei Verwendung eines binären Entscheidungsbaumes. Die ganze Komplexität des Handlungsablaufes liegt dann ja in den 510 Byte auf der RFID-Karte.

Edit: Das Ganze würde genauso natürlich auch bei der oben genannten Option 4 (Speichern im Dateinamen) und dem BY8001 funktionieren, nur eben mit Hexadezimalcodierung. Dann würde man sich das komplizierte Programmieren der RFID-Karte sparen, da alles über die Dateinamen des Hörspiels definiert wäre.