Forum: Mikrocontroller und Digitale Elektronik PeDa Tastenentprellung Unterschied short und long


von Frank Sinatra (Gast)


Lesenswert?

Ich habe vor kurzem die PeDa Tasten Entprellung genutzt. Das klappt bis 
dato auch wunderbar, da ich nur die get_key_press Funktion nutze. Jetzt 
möchte ich für einen ANDEREN Taster aber unterscheiden können, ob dieser 
kurz oder lange gedrückt worden ist.

Ich habe bereits verstanden, dass man für ein und denselben Taster 
entweder get_key_press oder get_key_short mit get_key_long kombiniert 
nutzen kann. Wenn ich also für Taster 1 und 2 get_key_press nutze und 
für Taster 3 get_key_long und get_key_short sollte das funktionieren.

Leider funktioniert das "lange-Drücken des Taster 1" noch nicht wie 
gewünscht, sondern der KEY_1 reagiert auch auf kurzes Drücken. Woran 
liegt es? Hier mein Code:
1
        if(get_key_short(1<<KEY_1))
2
        {}
3
        if(get_key_long(1<<KEY_1))
4
        {
5
            i = i + 2; // dies wird auch ausgeführt, wenn KEY_1 kurz gedrückt
6
        }
7
8
9
        if(get_key_press(1<<KEY_2))
10
        {
11
            i = i + 5; // dies funktioniert wunderbar
12
        }
13
14
15
16
17
        if(get_key_press(1<<KEY_3))
18
        {
19
            i = i + 3; // Dies funktioniert ebenfalls
20
        }

von Frank Sinatra (Gast)


Lesenswert?

Niemand eine Idee was ich machen (und wie Anwenden) um einen kurzen von 
einem langen Tastendruck zu unterscheiden?

So wie oben gezeigt, unterscheidet sich die get_key_long Funktion nicht 
von der get_key_press Funktion!

von Uwe (Gast)


Lesenswert?

Hallo Frank,

es liegt an deinem Timer Zeitverhalten und den zugehörigen Einstellungen 
im Kopf der PeDa Routinen.

Bei mir laufen diese Funktionen einwandfrei.

Du musst dir nur noch mal anschauen welche Funktionen mit welchen 
kombiniert werden dürfen !

get_key_press() sicherlich nicht mit get_key_short(), get_key_long().

von Frank Sinatra (Gast)


Lesenswert?

Was genau heisst kombinieren?

Kombinieren mit einem Taster oder kombinieren in dem gesamten Programm 
bzw. der gesamten Schleife?

Ich nutze ja key_press für Taster 2 bzw. 3 und short und Long für Taster 
1. D.h. sie sind nicht miteinander kombiniert, dies müßte zulässig sein?

Mein Funktionskopf bzw. REPEATMASKE

ist dann wie folgt:
1
#define REPEAT_MASK     (1 << KEY_1)

von Thomas H. (Firma: CIA) (apostel13)


Lesenswert?

Mein Tipp: Entprellen auf die eigenen Bedürfnisse selber programmieren, 
dann versteht man es auch.

von Karl H. (kbuchegg)


Lesenswert?

Frank Sinatra schrieb:
> Niemand eine Idee was ich machen (und wie Anwenden) um einen kurzen von
> einem langen Tastendruck zu unterscheiden?

Deine Einstellung für die Repeat Zeit wird einfach zu kurz sein 
(fungiert gleichzeitig auch als Merkmal ab wann ein Tastendruck als lang 
gilt).

Ist der Zahlenwert zu klein, dann kannst du gar nicht so schnell 
drücken, dass du nicht aus dem Zeit-Bereich für kurz rausfällst.

Also: Timing kontrollieren und im Zweifel auch mal nachrechnen, welche 
Zeiten sich für deinen konkreten Zahlenwert ergeben.
1
#define REPEAT_START    50                        // after 500ms

die 50 für 500ms (also 0.5 Sekunden) stimmen natürlich nur dann, wenn du 
die ISR auch auf 10ms eingestellt hast. Ausserdem können 0.5 Sekunden 
schon reichlich kurz sein.

: Bearbeitet durch User
von Peter D. (peda)


Lesenswert?

Frank Sinatra schrieb:
> Woran
> liegt es? Hier mein Code:

Warum wird immer nur das Codeschnipselchen gepostet, an dem es 
garantiert nicht liegt :-(

Nutze den Dateianhang und poste einen compilierbaren und getesteten 
Code!

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.