Taster kurz oder lang

Gast #923406
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
(Firma: TravelRec.) Persönliche Seite #923410
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.
Gast #923634
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?
1
// this function processes the button messages
2
void process_buttons(void)
3
{ 
4

5
  // find out which buttons were pressed
6
  u08 tmp = inp(BUTTON_PIN);
7
  // invert as 0 -> button pressed
8
  tmp = ~tmp;
9
  // make sure the button was not pressed before
10
  u08 cleaned_val = tmp ^ last_button;
11
  cleaned_val = cleaned_val & tmp;
12
  // store current val as last val
13
  last_button = tmp;
14
    
15
  //return if HOLD is active
16
  if (!(BUTTON_PIN&(1<<BTN_HOLD))) return; 
17

18
  // button 2 is pressed -> fast forward
19
  if (last_button&(1<<BTN_SONG_UP))   
20
    {
21
  FAST_FORWARD_ON;
22
  return;
23
  }
24
  FAST_FORWARD_OFF;
25
  
26
  // button 1 was pressed -> song back
27
  if(cleaned_val&(1<<BTN_SONG_DOWN)) play_prev();
28
  // button 2 was pressed -> song next
29
  if(cleaned_val&(1<<BTN_SONG_UP))   play_next();
30
  // button 3 was pressed -> vol -
31
  if(cleaned_val&(1<<BTN_VOL_DOWN))  vol_down();
32
  // button 4 was pressed -> vol +
33
  if(cleaned_val&(1<<BTN_VOL_UP))    vol_up();
34
  // button 5 was pressed -> play/stop
35
  if(cleaned_val&(1<<BTN_PLAY))
36
    {   
37
    if (bPause) bPause=false;
38
    else bPause=true;
39
  
40
    if (bPause) PLAY_LED_ON;
41
    else PLAY_LED_OFF;
42
  
43
    if(ps.state == IDLE) ps.state = PLAYING_MMC_INIT;  // go to start of file
44
    }
45
  
46
}

danke
Gast #923682
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:
1
  // button 2 is pressed -> fast forward
2
  if (get_key_rpt(1<<BTN_SONG_UP)) FAST_FORWARD_ON;
3
  else FAST_FORWARD_OFF;
4
  
5
  // button 2 was pressed -> song next
6
  if (get_key_press(1<<BTN_SONG_UP))  play_next();

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.