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 | }
|