Super, dass es jetzt schon mal anfängt zu klappen!
So wie es aussieht, funktioniert mp3_get_tf_sum also doch richtig - ausgezeichnet.
Ja, die serielle Kommunikation ist am Anfang mitunter recht verwirrend.
gj99:
Werden immer 10 Byte gesendet? Ist immer der 7te-Wert der Gesuchte?
So wie ich das sehe, werden eigentlich immer 10 Byte als Antwort vom Player gesendet (siehe Manual in #15).
Das "Protokoll" steht in #14:
Die "eigentlichen" Daten werden mit Byte 6 und 7 übertragen.
Byte 7 ist das "niedrigere" Byte und Byte 6 ist das "höhere" Byte.
Ein Byte kann maximal den Wert 255 haben. Also bei Antworten die einen maximalen Wert von 255 übertragen "steht" die Antwort allein in Byte 7, denn Byte 6 ist bis 255 ja immer Null, zum Beispiel bei der Lautstärke, die geht nur bis 30 (dezimal) bzw. 1E (hex).
Aber bei anderen Antworten musst du auch das 6. Byte auswerten, zum Beispiel bei der Abfrage der Trackanzahl auf der Karte - es wären ja auch mehr als 255 Tracks möglich.
Du musst also Byte 6 und Byte 7 auswerten: Byte 6 mit 256 multiplizieren und Byte 7 dazuzählen:
Trackzahl Byte Byte
(dezimal) 6 7
-------------------------------
5 00 05
12 00 0C
255 00 FF
256 01 00
300 01 2C
gj99:
In Deinem Beispiel-Sketch steht hinter "Delay" die Bemerkung "Dirty Code".
Weil Du den Befehl "Delay" grundsätzlich vermeiden willst oder dies viel eleganter gelöst werden kann?
Beides.
Delay hält die Ausführung des Codes für ein bestimmte Zeit praktisch vollständig an. Es kann während dieser Zeit auf nichts reagiert werden (z.B. Tastendrücke des Benutzers, ankommende Signale auswerten) und es gib auch keine Möglichkeit ausgehende Signale zu senden (z.B. ein Display zu aktualisieren) weil eben "alles steht". Deshalb sollte man Delays vermeiden. Delay hat aber duchaus seine Berechtigung bei "ganz ganz einfachen" Aufgaben und wenn ohnehin sonst wirklich nichts anderes zu tun ist ![]()
In diesem Fall ging es ja nur darum zu schauen, ob der Player überhaupt irgendetwas sendet, aber es musste eben einige Zeit gewartet werden. Für dieses Ausprobieren ist ein Delay voll OK und auch sehr anschaulich. Im fertigen Programm (vor allem in der Loop) sollte aber Delay vermieden werden.