Forum: Mikrocontroller und Digitale Elektronik Arduino millis()-delay ungenau


von Lukas D. (programmierer12)


Lesenswert?

Hallo alle zusammen und schon mal frohe Weihnachten,
allerdings habe ich ein kleines Problem welches das timen ohne delay in 
der Arduino-Umgebung angeht. Ich möchte eine LED für 6 Sekunden angehen 
lassen und wieder danach ausschalten und das auf Knopfdruck. Ich habe 
mir schon einen entsprechenden Sketch geschrieben, der auch prinzipiell 
funktionier nur stimmt die Wartezeit überhaupt nicht. Ich bekomme bei 
jedem Versuch andere Werte die von ca. 2 bis 5 Sekunden variieren, 
jedoch kein einziges Mal 6 Sekunden. Kann mir eventuell jemand einen 
Denkanstoß geben woran das liegen kann?

Hier noch mein Code:
1
int buttonPin = 2;
2
int ledPin = 13;
3
int ledState = LOW;
4
5
unsigned long current;
6
unsigned long previous = 0;
7
8
void setup(){
9
10
  pinMode(buttonPin, INPUT);
11
  pinMode(ledPin, OUTPUT);
12
13
}
14
15
void loop(){
16
17
  current = millis();
18
19
  if(digitalRead(buttonPin) == HIGH && ledState == LOW){
20
  
21
  digitalWrite(ledPin, HIGH);
22
  ledState = HIGH;
23
  
24
  }
25
  
26
  if(current - previous > 6000){
27
  
28
  if(ledState == HIGH){
29
  
30
    digitalWrite(ledPin, LOW);
31
    ledState = LOW;
32
    
33
  }
34
  
35
  previous = current;
36
  
37
  } 
38
  
39
}

MFG
Lukas

von Oba Leera (Gast)


Lesenswert?

Lukas D. schrieb:
> Kann mir eventuell jemand einen
> Denkanstoß geben woran das liegen kann?

Du bist jetzt schon zweiainhalb Jahre hier angemeldet und
schaffst es nicht deinen Code hier bernünftig zu posten
und in [c] Tags zu klammern?

Noch nie gelesen was hier vor jedem Textfenster zum
Posten steht?

>> Wichtige Regeln - erst lesen, dann posten!

von Rolf M. (rmagnus)


Lesenswert?

Du prüfst alle 6 Sekunden, ob die LED an ist, und dann schaltest du sie 
aus, ganz unabhängig davon, wann du die Taste gedrückt hast.
Übrigens: Eine vernünftige Einrückung erhöht die Lesbarkeit deutlich.

von Lukas D. (programmierer12)


Lesenswert?

Danke für den Tipp...
Ich hab mir schon fast gedacht, dass es etwas zu simples ist um es zu 
merken :)
Und sorry für den Code ich hatte ihn eigentlich in Tags...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.