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
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
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.
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
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(); |
Zur lang/kurz Erkennung mußt Du get_key_short und get_key_long nehmen. 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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.