Antwort auf: Zu Aufgabe von Tag 6: UDP Button Erweiterung
› Foren › Adventskalender › Zu Aufgabe von Tag 6: UDP Button Erweiterung › Antwort auf: Zu Aufgabe von Tag 6: UDP Button Erweiterung
Hallo Stefanie,
Du wolltest also die LED mit dem Taster bei Druck Ein-/Ausschalten. Hab ich wohl falsch verstanden.
Eine Variable „toggeln“ geht auch einfacher: led_an = !led_an;
Das späte Speichern des Schalterzustandes birgt die Gefahr, dass sich der Zustand gerade zwischen deiner Abfrage und dem Speichern ändert. Dann bekommst du einen Tastendruck nicht mit.
Das delay()
am Ende in der Hauptschleife verzögert das gesamte Programm. Solange es nichts anderes machen soll ist das OK.
Besser ist es, sich nach der Tastenänderung die aktuelle Zeit zu merken (millis()
) und vor erneuter Taster-Prüfung nachzusehen, ob bereits genug Zeit vergangen ist.
Beispiel:
unsigned long lastTime = 0L; // merkt sich die Zeit der letzten Änderung
int buttonZuletzt = 0; // letzter Zustand des Tasters
int led_an = 0; // Zustand der LED
#define VERZOEGERUNG 30L
loop()
{
// ... Mein übriges Programm, das gerne nicht verzögert wäre ...
if((millis() - lastTime) >= VERZOEGERUNG) // Genügend Zeit seit der letzten Änderung vergangen?
{
// ... ja, Taste auf Änderung prüfen und reagieren
int buttonJetzt = digitalRead(schalter); // einmal merken, ist sicherer
if(buttonJetzt != buttonZuletzt)
{
// Zustand geändert
buttonZuletzt = buttonJetzt; // neuen Zustand merken
lastTime = millis(); // Zeit der Änderung merken
// ... Reaktion auf die Änderung
if(!buttonJetzt)
{
// Gedrückt!
led_an = !led_an; // toggeln
digitalWrite(led,led_an); // setze led entsprechend
}
}
}
// ... noch mehr Programm, das gerne nicht verzögert wäre ...
}
- Diese Antwort wurde geändert vor 9 Jahren von Raabinator.