www.mikrocontroller.net

Forum: Compiler & IDEs Tastenabfrage erweitern


Autor: Jörn (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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
void tastenabfrage(void)
{

if(taste_pressed)
  {
    if((TASTE & (1<<S1)) && (keytime <= key_short))
      {
        tasten_status_kurz = play;
      }

    if((!(TASTE & (1<<S1))) && (keytime > key_short))
      {
        tasten_status_lang = (1 << 0);
      }
    else
      {
        tasten_status_lang = 0;
      }
    
  }


if(TASTE & (1<<S1))
  {
    key_counter = 0;
    taste_pressed = 0;
  }  
  
if(!(TASTE & (1<<S1)) && (!taste_pressed))
  {
  key_counter++;
  if(key_counter > 3){
      keytime = 0;
      taste_pressed = 1;
      key_counter = 0;
    }
  }
}

Autor: Peter Dannegger (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Jörn (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Dannegger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.