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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren