Advert-Funktion als Spielzeug

Hallo Forum,
Ostern wird in unserer Hecke ein TonUINO versteckt sein.
Da mein Kind zur Zeit mehr Feuerwehrmann Sam als Sohn ist, soll er diesem Thema angepasst sein.
Ich war gerade mit dem Hund draußen und habe ich mir ein paar Dinge zusammengesponnen:
Ich möchte eine Einsatzzentrale bauen.
Die Karten soll man in einen Schlitz stecken, kein Problem.
Dann möchte ich aber noch zusätzlich Knöpfe anbringen, die Sounds zwischendurch spielen.
Also mitten im Hörbuch drückt mein Kind auf den großen Knopf und es soll der Alarm losgehen.
Danach soll das Hörbuch unbeirrt weiterlaufen.
Wenn ich den DFPlayer richtig verstanden habe, ist dies genau die Funktion von mp3.playadvertisment(???), oder bin ich auf dem Holzweg?

Die Knöpfe möchte ich mit einem AnalogPin per binär gestuftes Widerstandsnetzwerk abfragen.

Einfügen würde ich die Geschichte ganz primitiv nach meinem Verständnis etwa so:

void loop() {
 switch Analogwert
         case 80...120
                mp3.playadvertisement(324);
                break;
          case 340...380
               mp3.playadvertisement(325);
               break;
         case .............


        while (Analogwert > 20) {
                  Warte hier bis wieder alle Knöpfe losgelassen sind um nur den ersten Druck auszuführen
      }
      do while 
    do {
    checkStandbyAtMillis();
   mp3.loop();  
......und so weiter......

Funktioniert meine grobe Idee oder denke ich zu primitiv?
Vielen Dank euch allen.

So grob funktioniert das.

ABER das advertisement funktioniert nur, wenn gerade eine andere mp3 läuft.
Wenn nicht kommt auch kein advert
du musst das so anpassen

if (isPlaying()) {
  mp3.playadvertisement(x);
} else {
  mp3.playMp3FolderTrack(x);
}

Das beduetet, das du deine Sounds im mp3 als auch im advert Ordner ablegen musst.

1 Like

Alternativ kannst du das auch so lösen wie der Modifiersound gespielt wird (~Zeile 1650):

if (isPlaying()) {
          mp3.playAdvertisement(x);
        }
        else {
          mp3.start();
          delay(100);
          mp3.playAdvertisement(x);
          delay(100);
          mp3.pause();
        }

Die Lösung von @marco-117 finde ich aber schöner. Aber wenn die Tracks knapp werden…

Was passiert wenn man mp3.start() ausführt, ohne das vorher was gespielt wurde?

Oh ich liebe dieses Forum,
10 Minuten warten und 2 passende Antworten parat.
Ich fasse mal für mich zusammen:
Version @marco-117 = ich muss jede Datei im Advert UND mp3 Ordner haben, wenn ein Lied gespielt wird starte ich aus Advert, wird keins gespielt starte ich aus Ordner mp3

Version @Gute_Laune = ich spiele einfach irgendein Lied ab und starte sofort danach die Werbung? Muss ich das delay dann an die Länge anpassen oder macht er die Pause dann nach der Werbung?

Danke euch

1 Like

Genau, das hast du richtig zusammengefasst.
Nur die Frage vom @marco-117 ist berechtigt.

Man könnte natürlich auch eine mp3 ohne Ton in den mp3 Ordner legen und diese, wie @Gute_Laune beschrieben, kurz anspielen. Dann hat man auch kein Problem mit eventuellen „Störgeräuschen“

Bei mir spielt der Player dann irgendwas ab. Ich erkenne da kein Muster. Was ich zitiert habe steht ja so in der Software drin beim Aufruf eines Modifiers. Nach dem Starten Modifikationskarte vorhalten und du weißt was dann passiert.
Grundsätzlich hört man den Track aber nicht, da ja sofort der Advert gestartet wird. Was auf meiner Box dabei nicht gut läuft ist das mp3.Pause, die Box spielt weiter. Vielleicht müsste man da abwarten bis der Advert fertig ist.

der DFPlayer ist im allgemeinen sehr träge.
Teilweise dauert das bis die Befehle ausgeführt werden. Wenn man zu viele schickt werden die auch verschluckt.

Im Fall des Modifier wird auf jeden Fall zu beginn der Modifier Startton gespielt.

@raznz_snasna probier doch beides mal aus, die drei Zeilen sind schnell geändert.

Ach ich habe immer einen langen Weg zwischen Idee und Ausführung.
Jetzt hier mal schnell das Steckbrett aufgebaut, ist einfach nicht meine Lebensweise.
Aber zumindest weiß ich nun, dass ich meine Zentrale so bauen kann.
DANN sind die 3 Zeilen auch schnell angepasst, aber dies wird wohl nichts im Januar…

Ich Empfehle die Platine von Thorsten.
Diese Steckbretter machen viele Probleme.
Wenn man dann nicht so versiert ist, sucht man sich schnell einen Wolf.

ich habe meine eigene Platine
https://discourse.voss.earth/t/meine-eigene-platine-anpassen/8252

Da muss ich nur am Arduino ein paar ungeplante Pins nach oben rausführen, aber das meiste läuft.

hier gibt es leere mp3 Files. Damit kann man die Variante von @Gute_Laune kontrollierter umsetzen und sich Files im mp3 Ordner sparen.

1 Like

Wird der Loop denn ganz professionell hier zügig durchlaufen oder gibt es irgendwo im Code Bremsen?
Ich möchte vermeiden, dass gleichzeitig zwei Taster gedrückt werden, am einfachsten natürlich indem der Code erst weiter geht, wenn alle wieder losgelassen sind.
Wird der Loop aber nur jede Sekunde durchlaufen, kann es ja sein, dass zwei Taster gedrückt werden.
Wisst ihr was ich meine?

Das lässt sich messen.
Gib am Anfang und am Ende der loop den Wert aus millis() über die serielle Schnittstelle aus.
Die Differenz beider zahlen ist deine Zeit.

Hmm, da kann man drauf kommen :smiley:
Danke dir