Forum: Compiler & IDEs Timer einstellen über Taster und AVR


von Stefan M. (skysurfer)


Lesenswert?

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

von Peter D. (peda)


Lesenswert?

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
Noch kein Account? Hier anmelden.