Code parallel ausführen arduino(GELÖST!)?


02.06.2024, 13:29

Hier der Code

fab3F  02.06.2024, 12:30

Könntest du erstmal den Code zur Verfügung stellen, den du aktuell benutzt.

Joehnlich 
Beitragsersteller
 02.06.2024, 13:23

Wie kann ich den Code reinstellen ist nämlich zu lang

3 Antworten

Da brauchst Du "multitasking".

Das macht man in dem man einen Hardwaretimer setzt der dann mit bestimmtem Takt eine ISR aufruft (ISR = Interupt Service Routine) aufruft.

In der kannst Du dann z.B. nachgucken ob die Fernbedienung was macht.

Schwierig ist daran natürlich, dass die nur sehr kurz laufen kann und nicht auf irgendwas warten darf - sonst ist alles andere Blockiert und die ISR wird sogar erneut aufgerufen obwohl die noch läuft.

Bei der FB müsste man dann im passenden Takt gucken welches Bit gerade anliegt (IR LED an oder aus) und sich die Bits nacheinander merken. Das ist leider nicht so leicht.

Schau mal hier:

https://learn.adafruit.com/multi-tasking-the-arduino-part-1

Woher ich das weiß:Berufserfahrung

Joehnlich 
Beitragsersteller
 02.06.2024, 13:27

Vielen Dank sieht interessant aus! Ich werde auf jeden Fall schauen dass ich es so zum Laufen bekomm.

Also, erstmal zu Problem 2: Damit der Track stoppt, kannst du folgenden Code einfügen, bevor ein neuer Song gespielt wird:
mp3.stop();

Wenn ich das jetzt richtig verstehe, empfängt der arduino keine signale, während ein Lied läuft? Das heißt quasi der Arduino wartet, bis die Funktion playTrackNumber() fertig ist und führt erst dann einen neuen loop aus?

Woher ich das weiß:Recherche

Joehnlich 
Beitragsersteller
 02.06.2024, 13:58

Genau er bleibt sozusagen bei "playtracknumber" stehen und wartet bis der Song zuende ist.

fab3F  02.06.2024, 14:26
@Joehnlich

Welchen Arduino hast du?

Die meisten Arduinos haben nur einen Prozessorkern, und können daher immer nur eine Sache gleichzeitig machen. (Funktion 1 -> Funktion 2 -> Funktion 3)

Egal wie wir es drehen oder wenden, sobald einmal die playtracknumber Funktion aufgerufen wird, wartet der Arduino, bis die Funktion fertig ist, und kann danach erst wieder eine andere Funktion ausführen, zum Beispiel ein Signal empfangen. Auch mit Multitasking können wir das nicht beheben, einfach aus dem Grund, weil die Funktion so lange zum Ausführen braucht.

Mir fallen zwei Lösungen ein:
Einfache Lösung: Zweiten Arduino und ir Empfänger kaufen, Fernbedienung kann ja für beide verwendet werden.
Schwieriger: Eine andere Bibliothek für das Abspielen von Songs suchen, wobei ich nicht glaube, dass es eine gibt, die dieses Problem nicht hat

Joehnlich 
Beitragsersteller
 02.06.2024, 14:33
@fab3F

Ich schau mal wegen der Bibliothek weil zwischen Lautsprecher und arduino hängt noch so ein Audiomodul und das kann songs ja auch selbständig abspielen also hab ich eigentlich gedacht dass das arduino sozusagen ein start signal sendet und dann das Modul den Rest übernimmt.

Ich habe übrigens ein original Arduino

fab3F  02.06.2024, 14:44
@Joehnlich

Wenn der arduino nur das startsignal sendet das wäre natürlich perfekt.

Joehnlich 
Beitragsersteller
 02.06.2024, 16:40
@fab3F

Habe es tatsächlich mit einer anderen Library zum laufen bekommen!

Muss jetzt nicht mal was zum stoppen von der Musik schreiben weil es alles von alleine geht!

Vielen Dank! Dass ich selber nicht auf die idee gekommen bin🙈

fab3F  02.06.2024, 17:05
@Joehnlich

Super, das freut mich zu hören. Könntest du vielleicht noch die funktionierende Version hochstellen (Du kannst es auch einfach auf https://pastebin.com/ hochladen und den Link reinstellen) Dann wissen andere mit einem ähnlichen Problem, wie sie das beheben können.

Joehnlich 
Beitragsersteller
 02.06.2024, 17:09
@fab3F

Habe es ganz oben in die Frage gestellt aber dauert noch kurz bis das online ist.

Müsste man den Code sehen ansich eher schwierig umzusetzen mit einem Arduino. Muss man halt darauf achten wie du selbst sagst mit millis arbeiten anstatt delay und non blocking Code verwenden.


Joehnlich 
Beitragsersteller
 02.06.2024, 13:30

Habe den Code gerade reingestellt

Joehnlich 
Beitragsersteller
 02.06.2024, 12:15

Welchen Code meinst du also das was bei mir nicht funktioniert