Ich habe ein Problem mit einem Taster und diesem Sketch:
Wenn ich den Taster nicht gedrückt habe, wird mir auf dem seriellen Monitor trotzdem FussTaster gedrückt angezeigt, d.h. der Mikrocontroller denkt der FußTaster wird gerade gedrückt. Ich finde den Fehler einfach nicht. Kann mir jemand sagen wo der Fehler liegt?
// Test FussSchalter
// Pin - Definitionen
const int FussTaster = 7;
bool e_FussTaster;
void setup() {
// Schnittstelle für den seriellen Monitor
Serial.begin(9600);
pinMode(FussTaster, INPUT_PULLUP);
bool e_Fusstaster = false;
}
void loop()
{
if (digitalRead(FussTaster) == LOW) { // Wenn der Taster gedrückt wird also GND
delay (5); // Taster entprellen
if (digitalRead(FussTaster) == LOW)
{
e_FussTaster = true;
}
}
if (digitalRead(FussTaster) == HIGH)
{
e_FussTaster = false;
}
if (e_FussTaster = true)
{
Serial.println("FussTaster gedrückt");
}
if (e_FussTaster = false)
{
Serial.println("FussTaster nicht gedrückt");
}
}
LeonardoFiando:
Wie mache ich das und was bringt mir das?
Unter Datei->Voreinstellungen die Compiler-Warnungen auf 'Alle' einstellen. Dann meldet der Compiler auch 'verdächtige' Konstrukte, die zwar syntaktisch richtig sind, aber ein hohes Fehlerpotential enthalten.
wenn Du wirklich entprellen willst dann benutze eine Lib dazu, das macht es einfacher. Ich finde es auch ziemlich verwirrend der Variablen e_FussTaster einen anderen Wert H /L zuzuweisen das wird irgendwann zu einem Fehler führen, es sollte doch immer der Wert vom Taster sein. Ansonsten mache ich das so.
bool e_FussTaster = !digitalRead(FussTaster) // das ! invertiert damit stimmt die Logik taster gedrückt =HIGH
if(e_FussTaster) {
// hier was auch immer bei gedrücktem Taster passieren soll
}
Entprellen muss man schließlich ja nicht immer. Wenn Du damit eine LED oder ein Relay einschalten willst gehts auch ohne. Wenn damit was gezählt oder getoggelt werden soll dann nicht. Bei einer Flankenerkennung kommt es drauf an. Wenn Du es zum testen erst mal einfach haben willst und es dir nicht ansonsten wehtut reicht auch erst mal am Anfang des Loop ein delay(10) Damit kann man auch beim Testen das überlaufen der Seriellen Schnittstelle beim debuggen oft erst mal vermeiden.