Forum: Compiler & IDEs Tastenabfrage erweitern


von Jörn (Gast)


Lesenswert?

Hi,
Ich benötige eine Tastenabfrage für meinen mp3 player.

Habe nun angefangen rumzuproggen und es funzt auch wunderbar:

Bei kurzem Tastendruck wird der zahlenwert der taste in die variable
tasten_status_kurz gespeichert. Bei einem langen Tastendruck soll die
Variable Taste_status_lang solange den wert der taste haben wie sie
gedrückt ist. Eine Variable keytime wird per timerinterrupt hochgezählt
und die tastenabfrage funktion wird im timerintterupt aufgerufen.

allerdings funzt das ganze bis jet nur mit einer taste. beim erweitern
auf mehrere tasten komm ich irgendwie nicht weiter... brett vorm kopf
;-) könnt ihr mir mal nen tipp geben wie ich das einfach erweitern
kann... oder würdet ihr das ganz anders machen?
Hier der Code
1
void tastenabfrage(void)
2
{
3
4
if(taste_pressed)
5
  {
6
    if((TASTE & (1<<S1)) && (keytime <= key_short))
7
      {
8
        tasten_status_kurz = play;
9
      }
10
11
    if((!(TASTE & (1<<S1))) && (keytime > key_short))
12
      {
13
        tasten_status_lang = (1 << 0);
14
      }
15
    else
16
      {
17
        tasten_status_lang = 0;
18
      }
19
    
20
  }
21
22
23
if(TASTE & (1<<S1))
24
  {
25
    key_counter = 0;
26
    taste_pressed = 0;
27
  }  
28
  
29
if(!(TASTE & (1<<S1)) && (!taste_pressed))
30
  {
31
  key_counter++;
32
  if(key_counter > 3){
33
      keytime = 0;
34
      taste_pressed = 1;
35
      key_counter = 0;
36
    }
37
  }
38
}

von Peter Dannegger (Gast)


Angehängte Dateien:

Lesenswert?

Anbei mal meine universelle Entprellroutine erweitert um eine
Repeatfunktion.

Diese Repeatfunktion ist für alle definierten Repeat-Tasten
gleichzeitig.

Das sollte aber kein Nachteil sein, denn z.B. gleichzeitig schnell hoch
und runter zu zählen, macht kaum Sinn.


Peter

von Jörn (Gast)


Lesenswert?

@ Peter

Etstmal danke für deinen Code.. haben ihn schon ausprobiert und er
Funzt auch echt gut....

Mein problem:

wenn ich in einer schleife einen kurzen und langen tastendruck abfrage
bekomme ich vor jedem langen tastendruck nochmal einen kurzen.... Somit
ist es nicht möglich mit einem Taster 2 verschiedenen funktionen
aufzurufen. Da ja immer ein kurzer Tastendruck vorangeht.

ich habe jetzt schon seit 2 Tagen probiert in deine Tastenabfrage mit
einzubauen das vorher erkannt wird ob es sich um einen kurzen oder
langen druck handelt und nur wenn es sich nicht um einen langen druck
handelt die bits für den kurzen gesetzt werden.. doch langsam bin ich
echt am verzweifeln.. ich bekomme es einfach nicht hin ;-)

Hättest du da vielleicht eine idee?

MFG Jörn

von Peter Dannegger (Gast)


Lesenswert?

Nun beim Beginn des Drückens kann die Software ja noch nicht wissen, ob
es ein kurzer oder langer Druck werden soll.

Es gibt daher 2 Möglichkeiten:

1.
Man macht die Ablaufsteuerung so, daß ein kurzer vor einem langen Druck
nicht stört.


2.
Man wertet den kurzen Druck erst nach dem Loslassen aus (Bit in
key_state wieder 0).
Das wird aber im allgemeinen als unangenehm empfunden, da das Feedback
fehlt, die Reaktion erfolgt ja erst nach dem Loslassen.


Peter

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.