Problem mit Taster GELÖST!

Hallo liebe community,

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");
  }
}

LG Leonardo

LeonardoFiando:

// Test FussSchalter

if (e_FussTaster = true)
 {
   Serial.println("FussTaster gedrückt");
 }
 if (e_FussTaster = false)
 {
   Serial.println("FussTaster nicht gedrückt");
 }
}

if (e_FussTaster == true)

Hallo
am besten du schaltest im IDE die Ausgabe von Compilermeldungen ein.

Danke für Eure Antworten!

@paulpaulson:

if (e_FussTaster == true)

Ja, so muss es heißen!:slight_smile:

@paulpaulson:

am besten du schaltest im IDE die Ausgabe von Compilermeldungen ein.

Wie mache ich das und was bringt mir das?

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.

LeonardoFiando:
und was bringt mir das?

Nur für den Fall, dass du solche Irrtümer gerne begehst, bringt dir das natürlich nichts.

Aber die meisten fortgeschrittenen möchten sich nicht gerne blamieren, die meisten fortgeschrittenen wollen, dass Warnungen gezeigt werden.

LeonardoFiando:

Hier ist es noch richtig

  if (digitalRead(FussTaster) == LOW) {             // Wenn der Taster gedrückt wird also GND

Hier ist es falsch

  if (e_FussTaster = true)

Hallo,

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.

Heinz

LeonardoFiando:
Danke für Eure Antworten!

@paulpaulson:

if (e_FussTaster == true)

Ja, so muss es heißen!:slight_smile:

Ich nehme mal an, Du meintest mich :wink:

Ich nehme mal an, Du meintest mich ;)

So ist es!:). Sorry habe mich vertippt;)

@Microbahner:
Danke für Deine Erklärung! Das probiere ich bei nächster Gelegenheit mal aus:).

Danke für Eure Antworten, Das Thema ist gelöst:)

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.