Unterscheiden ob ein Taster kurz oder lange gedrückt wird

OP #1903149
Lesenswert?
• ▲
▼
Ich möchte mit einem Transceiver Daten von einer Senderplatine auf eine 
Empfängerplatine übertragen und die Daten auf der Empfängerseite 
auswerten.

Mittels Taster auf der Senderseite möchte ich zwei Funktionen steuern.
Tastendruck = kurz (< 1sek.) --> mache dies...
Tastendruck = lang (> 1sek.) --> mache das...

Der derzeitige Code kann diese Unterscheidung zwar treffen, aber das 
Programm wird an der Stelle der delay-Anweisung für die Dauer der 
Zeitverzögerung blockiert.

Hat wer eine Idee, wie ich das Problem am Besten lösen kann?

Hier der C-Code:
1
#include <avr/io.h>
2
#include <util/delay.h>
3

4
#define button_down  !(PINC & (1<<PINC7))  // Button = Low
5

6
int main(void)
7
{
8
  DDRB = 0xFF;      // PORTB auf Ausgang
9
  DDRC = (0<<PINC7);    // PINC7 auf Eingang
10

11
  char zustand=0;
12

13
  while (1)
14
  {
15
    char wert=0;
16
    if(zustand == 0 && button_down)  
17
    //Wenn Button = Low
18
    {
19
      zustand=1;
20
      _delay_ms(1000);
21
      wert=1;
22
    }
23
    else if(zustand == 1 && button_down) 
24
    //Wenn Button noch immer Low
25
    {
26
      zustand=2;
27
      wert=2;
28
      PORTB |= (1<<PB0);  // Tastendruck lang
29
    }
30
    else if(zustand == 1)
31
    {
32
        PORTB |= (1<<PB1);  // Tastendruck kurz
33
    }
34
  }
35
}

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.