Ich grüße die Arduino_Gemeinde im neuen Jahr und komme auch gleich mit einem AnfängerProblem:
Meine Programm "liest" von einer SD-Card Sprachdateien (.wav) und "spricht" über Ohrhörer den jeweiligen Text <TMRpcm.h> . Damit die Ansagen sich nicht gegenseitig stören (ineinander quatschen, weil unterschiedliche Wiederholungsraten) brauche ich zeitliche Verzögerungen von 1000 und 1500 millis. Das mache ich jetzt mit entsprechenden delays, was gut funktioniert. Es handelt sich insgesamt um 16 delays innerhalb des Programmablaufs. Welche einfachen Alternativen sind vorzuziehen?
music.play(titelnummer); //Aufruf der Abspiel-Funktion - soll's zumindest skizzieren
while (music.isplaying());
delay(100); //wieder ein delay :) Pause zwischen den WAV's
Beziehst Du Dich auf den Code der isPlaying()-Methode oder meinst Du etwas Anderes?
Meiner Meinung nach tut die while()-Konstruktion genau das, was richtig ist - nämlich einfach nichts, solange etwas abgespielt wird.
Gruß
Gregor
PS: Schöner wär's IMO halt, wenn es einen leere while()-Körper gäbe, also
while(...) [b]{}[/b]
[/quote]
Ja, das tut es. Ist aber gut daß der Arduino blockiert wird. Sollte nicht in der Abspielzeit Tastendrücke kontrolliert werden und darauf reagiert werden?
Wenn ich dem While einen Schleifenkörper spendiere, kann ich darin auch auf Tastendrücke o.Ä. reagieren.
Ob oder wie ich die Musik dann aus bekomme, müsste in der Lib nachgelesen werden.
Diese Funktionalität hätte ich vorher aber auch in yield() machen könne, wobei die Version eben nicht nur solange wartet, wie die Musik an ist, sonder so lange, bis das delay() vorbei ist.
Nachtrag: Tasten drücken kommt in meinem Programm nicht vor. Das Programm entwickelt aus eingehenden Daten (von einer Datenleitung kommend) die Dateinamen selbst. Das funktioniert auch. Probleme machen mir die unregelmäßigen Dateizugriffe auf die SD. Dafür brauche ich zur zeitlichen Trennung Pausen.
Nun aber nicht mehr mittels delay, sondern so:
unsigned long millisekunden = 2000;
unsigned long zeit ;
void setup() {
Serial.begin(9600);
}
void loop() {
zeit = millis() ;
Serial.println( zeit); while ( millis() - zeit < millisekunden) {}; Serial.println( zeit);
zeit = 0;
}