Hi, ich hab mit einem AVR einen Timer aufgebaut, um die Zeit einstellen zu können habe ich 2 Taster um nicht ewig warten zu müssen soll der Eimer nach 10 Einzelschritten in 10 Schritten hoch bzw. runter zählen und wenn man ihn los lässt wieder mit Einzelschritten beginnen. Mein versuch : SIGNAL (SIG_OVERFLOW2) { cli(); // Interrupts nicht zulassen if (pin_keys & (1 << btn_up)) // Up-Taste gedrückt key_up++; else { key_up = 0; } if (pin_keys & (1 << btn_down)) // Down-Taste gedrückt key_down++; else { key_down = 0; } if (pin_keys & (1 << btn_start)) // Start-Taste gedrückt key_start++; sei(); // Interrupts zulassen } und in der main dann : while (1) { if (key_up >= 100) { display_value += 10; key_up = 90; } else if (key_up >= 10) // Up-Taste gedrückt { display_value++; // Wert +1 if (display_value > 999) // Wenn Überlauf => Wert=0 display_value = display_value - 999; key_up = 0; } if (key_down >=100) { display_value -= 10; key_down = 90; } else if (key_down >= 10) // Down-Taste gedrückt { display_value--; // Wert -1 if (display_value <= 1) // Wenn Unterlauf => Wert=999 display_value = 999 + display_value; key_down =0; } leider zählt er so nur rasant in 10er Schritten. Hat jemand ne Idee woran es liegt? Ich steh grad etwas auf dem Schlauch. Oder zufällig ne Lösung parat? Bin über jeden anstoß froh. Gruß SkySurfer
Da empfehle ich die Entprellroutine aus der Codesammlung. Und dann so etwa:
1 | // single press and repeat
|
2 | |
3 | if( get_key_press( 1<<KEY_UP )){ |
4 | repcount = 0; |
5 | val++; |
6 | }
|
7 | if( get_key_rpt( 1<<KEY_UP )){ |
8 | if( repcount < 10 ){ |
9 | repcount++; |
10 | val++; |
11 | }else{ |
12 | val += 10; |
13 | }
|
14 | }
|
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.