Forum: Mikrocontroller und Digitale Elektronik Komfortroutine Tastenentprellung und Aufgabe


von David (Gast)


Lesenswert?

Hallo,

ich habe folgende Aufgabe:
Ich möchte einen Tastendruck erkennen, der 5 Sekunden gedrückt war.
Zusätzlich die gleiche Taste zwischen lang (>=500ms) und kurz (< 500ms) 
unterscheiden.

Nun bin ich auf die Komfortroutine gestoßen:
http://www.mikrocontroller.net/articles/Entprellung#Komfortroutine_.28C_f.C3.BCr_AVR.29

Ist das damit machbar?
Bzw. könnte ich die 5 Sekunden aus der repeat Funktion ziehen, d.h.
get_key_long() und get_key_short() zum entscheiden, ob kurz oder lang, 
dabei lang auf 500ms stellen und zusätzlich get_key_rpt aufrufen und 
jeden repeat hochzählen und so 10x500ms zu haben, um auf die 5 Sekunden 
zu kommen?

Oder wie würdet ihr das lösen?

Danke.

von W.S. (Gast)


Lesenswert?

Indem ich das eigentliche Problem analysiere und mir dann eine Lösung 
dafür ausdenke - und zwar OHNE mir blind irgendwelche fremden Quellen 
unverstanden reinzuziehen.

Also versuche es doch mal mit selber denken.
W.S.

von Joachim .. (joachim_01)


Lesenswert?

Die hier hab ich mal verbrochen:
Beitrag "[ATMEGA] Code für Taster: kurz, lang, Doppelklick"
Sollte sich relativ einfach anpassen lassen.

von Peter D. (peda)


Lesenswert?

David schrieb:
> Ist das damit machbar?

Ja.

David schrieb:
> und zusätzlich get_key_rpt aufrufen

Nein, das geht nicht, da es schon von get_key_long() aufgerufen wird.

Die Tastenfunktionen liefern keine Zustände, sondern Ereignisse.
Würde man also im gleichen Kontext für die gleiche Taste eine Funktion 
an 2 Stellen aufrufen, würde zufällig mal die eine und mal die andere 
das Ereignis lesen.

Du kannst aber im Timerinterrupt, wie für die Repeatfunktion, einen 2. 
Zähler aufsetzen und damit nach Ablauf eine weitere Variable setzen.

Allerdings halte ich schon die Doppelfunktiopn einer Taste für nicht 
gerade bedienfreundlich und eine 3-fach Funktion für noch unpraktischer.
Ein solches Gerät kann dann wohl wirklich kein anderer als Du bedienen, 
ohne es irgendwann wütend an die Wand zu werfen.

von Peter D. (peda)


Lesenswert?

W.S. schrieb:
> und zwar OHNE mir blind irgendwelche fremden Quellen
> unverstanden reinzuziehen.

Na klar.
Und die Math- und printf-Libs nimmt man auch nicht, sondern schreibt 
sich alles vom Urschleim an selber.

Man kann durchaus fremde Libs nehmen, wenn man verstanden hat, wie sie 
einzusetzen sind. Oder man fragt bei Unklarheiten, daran ist nichts 
verwerfliches.

Niemand muß das Fahrrad immer wieder von neuem erfinden.
Insbesondere das Entprellen enthält diverse Fallstricke, wie man hier ja 
leider immer regelmäßig sehen muß. Da ist dann die Verwendung einer 
bewährten Lib erst recht der intelligentere Weg.

von David (Gast)


Lesenswert?

Danke!

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.