Hallo zusammen.
Einige Schritte weiter, aber noch nicht perfekt - mein universeller "Tastenentpreller ohne delay".
Folgender code klappt manchmal, aber nicht immer.
Fehler:HTML-Code:const int EntprellZeit = 500; // [ms], Entprellzeit (Testhalber 500ms) void loop() { AusgSekTakt(); //Sek-Takt ohne delay //Tastenabfrage int TasteZustandAlt = 0; // Tastenzustand einmalig initialisieren int TasteZustandNeu = digitalRead(TasteLiPin); // akt. Zustand der Taste auslesen if(TasteZustandNeu != TasteZustandAlt) { // wenn Tastenzustand verändert if(TasteLiEntprell() >= EntprellZeit) { // wenn Taste nach Entprellzeit entprellt TasteZustandAlt = TasteZustandNeu; // neuen Tastenzustand übernommen TextBlock("Taste im AKT. Zustand entprellt!"); } } } //Zeitpunkt der ersten Tasten-Zustandsänderung unsigned long TasteLiEntprell() { static unsigned long StartZeitEntprell = 0; // [ms] Startzeit static int TasteZustand = 0; // akt Zustand des Tasters TZ(1);//Testanzeige return Entprellen(TasteLiPin, TasteZustand, StartZeitEntprell); } //prüft Eingang auf AusgZustand und Zeit [ms] unsigned long Entprellen(int Pin, int &TasteZustand, unsigned long &StartZeitEntprell) { if (digitalRead(Pin) != TasteZustand) { // Zustandsänderung des Tasters TasteZustand = ! TasteZustand; // Zustand invertieren StartZeitEntprell = millis(); // Startzeit speichern } if (TasteZustand == 1) // wenn Taste gedrückt ist return millis() - StartZeitEntprell; // Zeit zurück geben, seit Taste gedrückt wurde else return 0; // 0 zurück geben, wenn Taste nicht gedrückt, oder noch nicht entprellt }
1. Sobald erstmalig korrekt 500ms-entprellt, zeigt das Prog bei jedem kleinen (<500ms) Tastendruck "Taste im AKT. Zustand entprellt!" an
2. Wenn die Taste länger als >Entprellzeit gedrückt wird, kommt dauernd "Taste im AKT. Zustand entprellt!",
obwohl folgende Zeile nur die Veränderung reagieren sollte.
Ich bin mir nicht sicher, ob fälschlicher weise eine dauernde Neuinisialisierung mit "0" erfolgt - sollte eigentlich nur beim Ersten mal init.HTML-Code:"if(TasteZustandNeu != TasteZustandAlt)"
HTML-Code:static unsigned long StartZeitEntprell = 0; static int TasteZustand = 0;







Zitieren


Lesezeichen