Taster kurz oder lang

Gast #923406
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
(Firma: TravelRec.) Persönliche Seite #923410
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.
Gast #923634
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?
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
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:
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

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