Schleife für Array zeitgesteuert auslesen…
Hallo,
ich habe hier so mein Problem oder verstehe etwas nicht richtig.
Es geht um DTFM, genauer um die Ausgabe der Töne.
Was passieren soll:
Ich betätige einen Kontakt, es wird 500ms gewartet bis die erste Adresse[0]
des Array ausgelesen wird.
Das wird nur einmal durchlaufen.
Dann wird die erste Adresse[0] ausgelesen und steht (LED/Ton an) 70ms
Dann gibt es eine Pause von 35ms
Dann wird die zweite Adresse[1] ausgelesen und steht (LED/Ton an) 70ms
Dann gibt es eine Pause von 35ms
u.s.w
Hier geht es drum:
while (millis() - Zeitstempel < FreiZ); // die ersten 500ms
{
for (int gwZifferZlAs = 0; gwZifferZlAs < gwZifferZl; gwZifferZlAs++)
Serial.print (gwZifferA[gwZifferZlAs]);
// als Beispiel
// LED an: Ton hörbar/wird übertragen, länge 70ms
// LED aus: Pause zwischen den Tönen, länge 35ms
}
Hier wird "while" genutzt, es wird also gewartet, "while" habe ich genutzt, weil
ich "delay()" hasse.
Aber warum hier "while"? Der Arduino kann doch im Hintergrund nichts machen.
Ist das hier richtig? Dann kann ich doch auch gleich delay() nehmen.
Das muß doch auch mit einem Intervall-Timer funktionieren der im Hintergrund
läuft?
Ich muss doch nicht für jede Zeit/Adresse "while" setzen und warten?
Gruß und Dank
Andreas
So sieht es jetzt aus, nur mit 500ms Wartezeit
int gwZiffer; // gewählte Ziffer
int gwZifferZl; // das ist der Zähler für die Ziefern, 1. Ziffer, 2. Ziffer, u.s.w.
int gwZifferZlAs; // das ist der Zähler für die Array-Adressen, Ausgabe
int gwZifferA[21]={gwZiffer}; // das Array für 20 Ziffern oder weniger
unsigned long Zeitstempel = 0;
long FreiZ = 500; // länge Freizeichen in ms
long Ton = 70; // Länge Ton in ms
long Pause = 35; // Länge Pause zwischen den Tönen in ms
valZS1 = digitalRead(S1);
if (valZS1 != buttonStateS1)
{
if (valZS1 == HIGH) // wenn gedrückt läuft der bis zum Ende durch
{
buttonPressesS1++;
}
}
buttonStateS1 = valZS1;
if (buttonPressesS1 == 1)
{
Zeitstempel = millis();
while (millis() - Zeitstempel < FreiZ); // hier wird der gedrückte Taster aufgehalten
{
for (int gwZifferZlAs = 0; gwZifferZlAs < gwZifferZl; gwZifferZlAs++)
Serial.print (gwZifferA[gwZifferZlAs]);
}
}
if (buttonPressesS1 > 0)
{
buttonPressesS1 = 0; // Taster fertig gedrückt
}