Zwei Taster einlesen, Entprellen, Flankenerkennung

Gast #2491964
Lesenswert?
• ▲
▼
Hallo,

ich arbeite gerade an einem Menü für ein LCD Display und möchte dazu 
zwei (nicht entprellte) Taster zur Navigation einlesen.

Bisher mache ich das so:
1
void sw_read (void)
2
{
3
  uint8_t read;
4
  read = PINB;           //Einlesen der Taste
5
  read &= 0b00000110;    //Betrachte nur PB1 (down) und PB2 (up)
6
  
7
  if( read & (1<<PB2) )  
8
      state++;           //uint8_t, variable der State Machine
9
  
10
  if( read & (1<<PB1) )
11
      state--;
12
            
13
  _delay_ms(150);         //Zeit zum Loslassen und Tasterprellen  
14
}

Funktiniert zwar, aber leider ist die Bedienung mit durch das große 
Delay ziemlich "hakelig".
Ich steh gerade etwas auf dem Schlauch, wie ich das ganze (in Software!) 
möglicht elegant (mittels Flankenerkennung?) lösen könnte!

Ich hoffe jemand kann mir da weiterhelfen!

Viele Grüße
Tim

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.