PeDa Tastenentprellung Unterschied short und long

Gast #3927875
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
        }
Gast #3928005
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!
Gast #3928083
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().
Gast #3928112
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)
#3928185
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren