Arduino wenn Taster zwei Mal innerhalb einer gewissen Zeit betätigt wird LED an?

2 Antworten

1) In deiner main-Schleife fragst du permanent den Taster ab (eventuell entprellen, wie PeterKremsner gesagt hat). Ich weiß nicht, ob die Arduino IDE einen Change-Notifier anbietet (Interrupt bei Level-Change), dann könntest du das noch präziser außerhalb der Polling-Schleife erledigen.

2) Wird der Taster betätigt, merkst du dir den Zeitstempel mit millis().

3) Prüfe, ob du innerhalb deiner gewünschten Zeit bist, indem du deine Differenz von millis() abziehst und gegen deinen Zeitstempel aus 2) prüfst.

4) Kommt innerhalb der gewünschten Zeit der zweite Tastendruck, führe deine gewünschte Handlung aus und resette das ganze.

Woher ich das weiß:Studium / Ausbildung – Masterstudium Elektrotechnik - Schwerpunkt Embedded Systems
PeterKremsner  27.06.2017, 12:01

Stimmt hab in meiner Antwort vergessen, dass der Arduino ja bereits eine Art Systick anbietet, die Methode mit den millis ist jedenfalls besser als die mit dem Timer.

Was das Level-Change angeht, kann ich zwar nicht sagen, ob es in Arduino einfach abgreifbar ist, der Atmega selbst unterstützt jedoch Pin Interrupts, auf vielen IO Pins.

0

Du kannst beim ersten druck auf den Taster einen Timer starten und beim zweiten den Timer stoppen und die Zeit auslesen.

Du musst dann hald nur die Timerticks, mit der CPU Frequenz und dem Prescaler auf eine Zeit umrechnen, vielleicht hat Arduino aber bereits so etwas schon in den Bibliotheken.

Allerdings darfst du hier nicht vergessen den Schalter zu entprellen, also wenn du eine Flanke an dem Pin detektierst, nimm für 10ms keine neuen Flanken mehr an.

Je nachdem wie du die Flanke detektierst kannst du das anders machen.

Wenn die Flanke ein Interrupt auslöst deaktiviere das Interrupt und in der Loop aktivierst du es 10ms später wieder.

Das geht am einfachsten mit einer Abfrage ob das Interrupt aktiviert ist, wenn nicht sleep 10ms und danach interrupt wieder einschalten.