1.2 - Taster entprellen


Wenn man mit dem Arduino z.B. die Variable "Druckzähler" erstellt, die bei 0 startet und bei jedem druck auf den Taster um +1 addiert werden soll, wird das mit einem einfachen Taster Code nicht funktionieren. Der Arduino fragt den Tasterstatus (High oder Low) zig mal pro Sekunde ab und da sich der Status des Tasters durch einfaches Betätigen mehrfach ändert, wird die Variable nicht nur um +1 hochgesetzt, sondern z.B. von 0 auf 6. Jetzt haben wir das Problem, das unser Zähler nicht funktioniert.

if (tasterStatus == HIGH) { druckZaehler++; delay(300); }
Teileliste
-
Arduino IDE (Tutorial wurde mit 1.6.5 erstellt)
-
Arduino Uno (oder ein anderes Modell)
-
LED (mit Vorwiederständen)
Anschlussplan
Code
// Konstanten const int tasterPin = 2; // Pin Nummer des Tasters const int ledPin = 3; // Pin Nummer der LED des Arduinos // Variablen int tasterStatus = LOW; // aktuelles Signal vom Eingangspin int tasterGedrueckt = 0; // abfragen ob Taster gedrückt war int lichtmodus = 0; // festlegen der verschiedenen Lichtprogramme int ledStatus = LOW; // aktueller Zusatnd der LED int entprellZeit = 200; // Zeit für Entprellung, anpassen! unsigned long tasterZeit = 0; // Zeit beim drücken des Tasters unsigned long ledMillis = 0; // Zeit für den Blinkrythmus der LED void setup() { pinMode(ledPin, OUTPUT); // LED Pin wird als Ausgang gesetzt pinMode(tasterPin, INPUT); // Taster Pin wird als Eingang gesetzt } void loop() { // Lesen des tasterPin tasterStatus = digitalRead(tasterPin); // Wenn der Taster gedrückt ist... if (tasterStatus == HIGH) { tasterZeit = millis(); // aktualisiere tasterZeit tasterGedrueckt = 1; // speichert, dass Taster gedrückt wurde } // Wenn die gewählte entprellZeit vergangen ist und der Taster gedrückt war... if ((millis() - tasterZeit > entprellZeit) && tasterGedrueckt == 1) { lichtmodus++; // lichtmodus wird um +1 erhöht tasterGedrueckt = 0; // setzt gedrückten Taster zurück } //*************************************Leuchtprogramme************************************** // Wenn Lichtmodus 0 ist, blinke im 1000ms Rythmus if (lichtmodus == 0) { // Wenn 1000ms vergangen sind... if (millis() - ledMillis > 1000) { ledStatus = !ledStatus; // kehre den letzten LED Zustand um (z.B LOW -> HIGH) digitalWrite(ledPin, ledStatus); // Ausgabe am LED Pin ledMillis = millis(); // beginne die Zeitzählung von vorne } } // Wenn Lichtmodus 1 ist, blinke im 500ms Rythmus else if (lichtmodus == 1) { // Wenn 500ms vergangen sind... if (millis() - ledMillis > 500) { ledStatus = !ledStatus; // kehre den letzten LED Zustand um (z.B LOW -> HIGH) digitalWrite(ledPin, ledStatus); // Ausgabe am LED Pin ledMillis = millis(); // beginne die Zeitzählung von vorne } } // Wenn Lichtmodus 2 ist, blinke im 250ms Rythmus else if (lichtmodus == 2) { // Wenn 250ms vergangen sind... if (millis() - ledMillis > 250) { ledStatus = !ledStatus; // kehre den letzten LED Zustand um (z.B LOW -> HIGH) digitalWrite(ledPin, ledStatus); // Ausgabe am LED Pin ledMillis = millis(); // beginne die Zeitzählung von vorne } } // Wenn Lichtmodus 3 ist, leuchte durchgehend else if (lichtmodus == 3) { digitalWrite(ledPin, HIGH); // LED leuchtet } // Wenn Lichtmodus 4 ist, LED aus else if (lichtmodus == 4) { digitalWrite(ledPin, LOW); // LED ist aus } // Wenn der Lichtmodus auf 5 sprngt, setzte ihn wieder zurück auf 0 um von vorne zu beginnen else { lichtmodus = 0; } }
Einen Kommentar verfassen
Einloggen um Kommentare zu verfassen
Als Gast kommentieren