Hallo Leute, ich hab eine Frage zu meinem Code und zwar. Ich mache eine entprellte Tasten Abfrage. Wenn Taster gedrückt schiebe eine 1 in eine variable an eine bestimmte Stelle. Dann mache ich eine Switch case Vergleich. Wenn TasterZustand == 0x01 mach was, TasterZustand == 0x02 mach was anderes, TasterZustand == 0x03 was ganz anderes Zustand die der vergleich bei 0x01 & 0x02 funktioniert. Da ist jeweils nur ein Taster gedrückt. Aber wenn ich die beiden Gleichzeitig drücke passiert da irgendwie nix. Wieso? (Das ich nach den Code dann in der zweiten while Schleife gefangen bin ist mir klar. ist nur zum Verständnis gedacht)
1 | //Schalterzustand Speicherung;
|
2 | int zRotP=0, zRotM=0, zGrunP=0, zGrunM=0, zBlauP=0, zBlauM=0,x; |
3 | uint8_t TasterZustand=0, StufeR=50, StufeB=50, StufeG=50; |
4 | |
5 | while(1) { |
6 | TasterZustand=0; |
7 | |
8 | if(taster(PIND, PIND2, &zRotP)==1){ |
9 | TasterZustand |= (1<<1); |
10 | }
|
11 | if(taster(PINC, PINC0, &zRotM)==1){ |
12 | TasterZustand |= (1<<0); |
13 | }
|
14 | |
15 | switch(TasterZustand){ |
16 | case 0x01: OCR1A= pgm_read_word(&pwmtable_16[StufeB+=10]);break; |
17 | case 0x02: OCR1A= pgm_read_word(&pwmtable_16[StufeB-=10]);break; |
18 | case 0x03: |
19 | while(1){ |
20 | farbenwechsel120(); |
21 | }break; |
22 | }
|
23 | |
24 | |
25 | uint8_t taster(uint8_t TASTERPORT, uint8_t TASTERBIT, volatile int *zustand) |
26 | {
|
27 | //static unsigned uint8_t zustand;
|
28 | uint8_t rw = 0; |
29 | if(*zustand == 0 && !(TASTERPORT & (1<<TASTERBIT))){//Taster wird gedrueckt (steigende Flanke) |
30 | *zustand = 1; |
31 | rw = 1; |
32 | }
|
33 | else if (*zustand == 1 && !(TASTERPORT & (1<<TASTERBIT))){//Taster wird gehalten |
34 | *zustand = 2; |
35 | rw = 0; |
36 | }
|
37 | else if (*zustand == 2 && (TASTERPORT & (1<<TASTERBIT))){//Taster wird losgelassen (fallende Flanke) |
38 | *zustand = 3; |
39 | rw = 0; |
40 | }
|
41 | else if (*zustand == 3 && (TASTERPORT & (1<<TASTERBIT))){//Taster losgelassen |
42 | *zustand = 0; |
43 | rw = 0; |
44 | }
|
45 | return rw; |
46 | }
|
Müsste er dann nicht einfach nach einander die Einsen in die Variable schieben? Benutze Atmega32. Danke in voraus.