WDT Reset
- supporter
- Offline
- Premium Member
Weniger
Mehr
- Beiträge: 135
- Dank erhalten: 12
26 Sep 2016 13:27 - 26 Sep 2016 13:28 #88
von supporter
WDT Reset
Hallo Luigi,
bevor wir uns was erarbeiten macht es vielleicht Sinn, daß ich meine harte Meinungkurz begründe indem wir Deinen Code mal zerpflücken:
Serial.println("Taste druecken fuer naechsten Scan"); //OK
int taste = digitalRead(2);
//Deklariert eine Variable vom Typ "int" mit dem Namen "taste" und schreibt den Status des digitalen Eingangs 2 rein.
Ein digitaler Eingang kann nur den Status 0 oder 1 haben. Die Variable "taste" sollte also nur den Speicherplatz eines bools belegen.
Richtig: bool taste = digitalRead(2);
while(taste = HIGH);
{ taste = digitalRead(2);
}
}
In der Syntax ist ein "}" zuviel.
In der Syntax ist ein ";" zuviel.
In der Syntax vergleichst Du nicht sondern Du weist zu.
Richtig müssten Deine Befehle so geschrieben werden:
while(taste == HIGH) //oder: (taste == 1) oder (taste)
; //das muss hier weg. Es kommt nur nach Befehlen
{ taste = digitalRead(2); //Du weist der Variable ein zweites Mal den Status des digitalen EIngangs zu
}
}
ALSO THEORETISCH:
bool taste = digitalRead(2);
while(taste == HIGH){
Serial.println("Taste EIN");
}
ABER PRAKTISCH:
- solange der Button gedrückt ist wird immer und immer wieder (tausende Male pro Sekunde) die Funktion "machmalwasfunktion()" aufgerufen!
- Du willst das Ergebnis der Abfrage nur einmal auslösen?
Dann besser so:
bool ichwarschonhier;
bool taste = digitalRead(2);
if (taste == HIGH && ichwarschonhier==0){
Serial.println("Taste EIN");
ichwarschonhier=1;
delay(10);
}
if (taste == 0){
ichwarschonhier=0;
}
Für den Anfang hast Du eine (ungetestete) Version welche aber laufen sollte. Das delay(10); muss nun noch dringend raus. Das erreichst Du, indem Du diese Abfrage nur z.B. alle 100ms abfragst.
Das erreichst Du, indem Du die Problematik "blink without delay" studierst.
Viel Spaß beim Lernen !
Nette Grüße
Jörg
bevor wir uns was erarbeiten macht es vielleicht Sinn, daß ich meine harte Meinungkurz begründe indem wir Deinen Code mal zerpflücken:
Serial.println("Taste druecken fuer naechsten Scan"); //OK
int taste = digitalRead(2);
//Deklariert eine Variable vom Typ "int" mit dem Namen "taste" und schreibt den Status des digitalen Eingangs 2 rein.
Ein digitaler Eingang kann nur den Status 0 oder 1 haben. Die Variable "taste" sollte also nur den Speicherplatz eines bools belegen.
Richtig: bool taste = digitalRead(2);
while(taste = HIGH);
{ taste = digitalRead(2);
}
}
In der Syntax ist ein "}" zuviel.
In der Syntax ist ein ";" zuviel.
In der Syntax vergleichst Du nicht sondern Du weist zu.
Richtig müssten Deine Befehle so geschrieben werden:
while(taste == HIGH) //oder: (taste == 1) oder (taste)
; //das muss hier weg. Es kommt nur nach Befehlen
{ taste = digitalRead(2); //Du weist der Variable ein zweites Mal den Status des digitalen EIngangs zu
}
}
ALSO THEORETISCH:
bool taste = digitalRead(2);
while(taste == HIGH){
Serial.println("Taste EIN");
}
ABER PRAKTISCH:
- solange der Button gedrückt ist wird immer und immer wieder (tausende Male pro Sekunde) die Funktion "machmalwasfunktion()" aufgerufen!
- Du willst das Ergebnis der Abfrage nur einmal auslösen?
Dann besser so:
bool ichwarschonhier;
bool taste = digitalRead(2);
if (taste == HIGH && ichwarschonhier==0){
Serial.println("Taste EIN");
ichwarschonhier=1;
delay(10);
}
if (taste == 0){
ichwarschonhier=0;
}
Für den Anfang hast Du eine (ungetestete) Version welche aber laufen sollte. Das delay(10); muss nun noch dringend raus. Das erreichst Du, indem Du diese Abfrage nur z.B. alle 100ms abfragst.
Das erreichst Du, indem Du die Problematik "blink without delay" studierst.
Viel Spaß beim Lernen !
Nette Grüße
Jörg
Letzte Änderung: 26 Sep 2016 13:28 von supporter.
Folgende Benutzer bedankten sich: Luigi
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- Aktuelle Seite:
- Startseite
- Impressum / Datenschutz / ...
- ESP8266 spezifisch
- Programmierumgebung / IDE
- WDT Reset