Forum: Mikrocontroller und Digitale Elektronik Funktionsaufruf für bestimmte Zeit unterbinden


von Niels K. (niesl)


Lesenswert?

Hallo liebe Gemeinde,
Ich versuche mich gerade mit einem XMega in die Welt der Mikrocontroller 
einzuarbeiten. Nachdem ich gerade mit dem Qtouch Button rumgespielt 
habe, stellt sich für mich die Frage ob man Funktionsaufrufe für eine 
bestimmte Zeitspanne "sperren" kann um eine Mehrfachauslösung zu 
unterbinden.
Bisher ruft bei mir der Timerinterrupt einen Algorithmus auf, in dem 
dann entschieden wird ob der Button gedrückt ist oder nicht. Ich will 
aber nicht, dass der Button mehrmals in einer bestimmten Zeitspanne 
ausgelöst wird. Gibt's da irgendeine pfiffige Lösung oder bleibt mir nur 
den Timer einfach komplett für eine bestimmte Zeit anzuhalten?

von Karl H. (kbuchegg)


Lesenswert?

1
uint8_t callWait = 0;
2
3
Timer_interrupt
4
{
5
6
  if( callWait == 0 )
7
  {
8
    if( Button pressed )
9
    {
10
      callWait = 5;  // oder was auch immer angebracht ist
11
      call();
12
    }
13
  }
14
  else
15
    callWait--;
16
}

: Bearbeitet durch User
von H.Joachim S. (crazyhorse)


Lesenswert?

Mit der Abfrage, ob das Ding gedrückt wurde (oder auch mehrfach) ist ja 
noch nichts passiert. Du musst ja schliesslich das Ergebnis der Abfrage 
irgendwie weiterverarbeiten - da würde ich ansetzen.

von Karl H. (kbuchegg)


Lesenswert?

Allerdings hört sich das Ganze danach an, als ob du auf der Suche nach 
Entprellung bist, bzw. den Unterschied zwischen
* Taste wurde niedergedrückt und
* Taste ist gedrückt
lernen musst.

Ersteres ist eine Flankenerkennung. D.h. der Weg führt über die 
Erkenntnis, das eine niedergedrückte Taste auch wieder losgelassen 
werden muss - d.h. der Wechsel von nicht gedrückt zu gedrückt ist das 
entscheidende und nicht das die Taste gedrückt ist.

von Niels K. (niesl)


Lesenswert?

Danke für Eure Antworten. Entprellung scheint das richtige Stichwort zu 
sein, das werde ich mir erstmal zu Gemüte führen.
Bisher löse ich es halt über ein Flag, das durch "loslassen" der 
Touchfläche wieder freigegeben wird. Ich würde gerne aber auch 
Mehrfachauslösung durch Halten der Taste zulassen, aber sowas ist ja im 
Wiki beschrieben.
Vielen Dank für das Stichwort!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.