Forum: Mikrocontroller und Digitale Elektronik Unterscheiden ob ein Taster kurz oder lange gedrückt wird


von H. G. (ledi)


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
}

von G ast (Gast)


Lesenswert?


von me (Gast)


Lesenswert?

Timer Interrupt

Die Entprellroutine von Peter Dannegger 
http://www.mikrocontroller.net/articles/Entprellung (ganz unten) 
unterstützt diese Unterscheidung mit get_key_short() und get_key_long()

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.