mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Taster kurz oder lang


Autor: mr-unbekannt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo!

wie kann ich rausfinden ob ein taster lang oder kurz gedrückt worden 
ist?
Das brauche ich nämlich für die Forward-Funktion des MP3-Players...

vielen Dank,
mr

Autor: fabs (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
z.B. mit der universellen Tastenentprellroutine von PeDa.
Sonst musste halt die Zeit von Drücken bis Loslassen auswerten, und wenn 
das Loslassen nicht innerhalb von Zeit X kam ist es ein Repeat.

Gruß
Fabian

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zähler bei gedrückter Taste mitlaufen lassen, wenn Taste losgelassen 
wird, Zählerwert vergleichen, wenn größer xx, dann war´s ein langer 
Druck.Dann Zähler löschen für nächste Abfrage. Oder Zählwert gleich 
während gedrückter Taste auf >xx vergleichen, dann Schaltvorgang 
auslösen. Bei Loslassen der Taste wieder Zähler löschen.

Autor: mr-unbekannt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
sorry, ich hatte wieder mal einen denkfehler...!

Folgende Problemstellung:
Der MP3-Player soll das nächste Lied spielen wenn man den Taster normal 
drückt. Die Forward (Vorspulen) Funktion soll natürlich nur bei 
gedrückthalten des Tasters on sein.

beim folgendem code wird bei einem druch auf den taster nur vorgespult, 
weis jemand warum?
// this function processes the button messages
void process_buttons(void)
{ 

  // find out which buttons were pressed
  u08 tmp = inp(BUTTON_PIN);
  // invert as 0 -> button pressed
  tmp = ~tmp;
  // make sure the button was not pressed before
  u08 cleaned_val = tmp ^ last_button;
  cleaned_val = cleaned_val & tmp;
  // store current val as last val
  last_button = tmp;
    
  //return if HOLD is active
  if (!(BUTTON_PIN&(1<<BTN_HOLD))) return; 

  // button 2 is pressed -> fast forward
  if (last_button&(1<<BTN_SONG_UP))   
    {
  FAST_FORWARD_ON;
  return;
  }
  FAST_FORWARD_OFF;
  
  // button 1 was pressed -> song back
  if(cleaned_val&(1<<BTN_SONG_DOWN)) play_prev();
  // button 2 was pressed -> song next
  if(cleaned_val&(1<<BTN_SONG_UP))   play_next();
  // button 3 was pressed -> vol -
  if(cleaned_val&(1<<BTN_VOL_DOWN))  vol_down();
  // button 4 was pressed -> vol +
  if(cleaned_val&(1<<BTN_VOL_UP))    vol_up();
  // button 5 was pressed -> play/stop
  if(cleaned_val&(1<<BTN_PLAY))
    {   
    if (bPause) bPause=false;
    else bPause=true;
  
    if (bPause) PLAY_LED_ON;
    else PLAY_LED_OFF;
  
    if(ps.state == IDLE) ps.state = PLAYING_MMC_INIT;  // go to start of file
    }
  
}

danke

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: mr-unbekannt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
danke!

jetzt habe ich deine funktionen verwendet, funktioniert super, ausser 
dass wenn ich den taster gedrückt halte wird auch noch das nächste lied 
gespielt.

kann man das irgendwie verhindern?

folgender code:
  // button 2 is pressed -> fast forward
  if (get_key_rpt(1<<BTN_SONG_UP)) FAST_FORWARD_ON;
  else FAST_FORWARD_OFF;
  
  // button 2 was pressed -> song next
  if (get_key_press(1<<BTN_SONG_UP))  play_next();

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zur lang/kurz Erkennung mußt Du get_key_short und get_key_long nehmen.


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.