Pages: 1 [2]   Go Down
Author Topic: Brauche Hilfe beim Countdowntimer ohne delay.  (Read 1509 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 23
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo Bernward,

ich habe nochmals mit dem Sketch rum gespielt um noch eine 2. LED blinken zu lassen nach den 180 sekunden. Ich habe den Befehl :
Code:
[b]if(aktuell > 6)[/b]  {
   if (flag){
    flag = false; start = millis();
   }
   if (millis() - start < (6 - aktuell) * 100){
    if (onoff)
      digitalWrite(LedYe,HIGH);
     else 
      digitalWrite(LedYe,LOW);
    }
    else{
     onoff = !onoff; flag=true;
   }
  }
  else{
   digitalWrite(LedYe,HIGH);
  }
 }
 else{
  wiederholung = 0; startzeit = millis();
 }
}

Ich dachte das nach den Intervall 6 die 2. Led anfängt zu Blinken aber irgendwie fängt sie erst bei Aktuell 7 oder 8 an. Ich bin auch noch nicht dahinter gekommen wie der Code :
(millis() - start < (6 - aktuell) * 100)          funktioniert!

Gruß Mischa
Logged

Offline Offline
Sr. Member
****
Karma: 8
Posts: 359
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo Mischa,
wenn die LED erst bei 7 anfängt, dann liegt es vermutlich an der Abfrage.
Zuerst wird ja gefragt < 6, du solltest dann in deiner Abfrage schreiben
if(aktuell >= 6) oder aber if(aktuell >5) das dürfte schon reichen.

Die Zeile if (millis() - start < (6 - aktuell) * 100) liefert eigentlich nur die Blinkfrequenz der LED
Wenn das Programm startet ist aktuell 0 , also brennt die LED 6*100ms und dann 6*100ms nicht.
Dann wird aktuell immer eins größer, dem entsprechend wird die Blinkzeit 500ms, 400ms, 300ms, 200ms, 100ms.
Gruß
Bernward
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 23
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo Bernward,

das mit den runterzählen der blink freq habe ich verstanden aber für was ist die diff rechnung von millis -start?     "(millis() - start < (6 - aktuell) * 100)"

Gruß Mischa
Logged

Offline Offline
Sr. Member
****
Karma: 8
Posts: 359
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo,
also am Anfang wird die variable start auf den aktuellen Wert von millis() gesetzt.
Bei jedem Durchlauf der Schleife (dauert ein paar Millisekunden) wird dann kontrolliert, ob die vergangene Zeit
(millis()-start) noch kleiner als die Blinkzeit ist. Falls ja bleibt alles wie es ist, falls nicht wird zwischen LED an und aus gewechselt.
Schwer zu beschreiben aber die Abfrage ist zuständig für das blinken (Wechsel zwischen LED an und LED aus).
Logged

Pages: 1 [2]   Go Up
Jump to: