Timer einstellen über Taster und AVR

OP #497653
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
#497680
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

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.