Hallo erstmal,
ich beschäftige mich erst seit kurzem mit der Programmierung von mueCs
(ATmega8) und habe direkt mal eine Frage.
Ich habe 2 Taster, eine LED und habe mit dem Tutorial ein bisschen
experimentiert. Klappt auch super, aber nun kam mir die Idee pro Taster
eine Blinkfrequenz zu realisieren (funktioniert super) und wenn beide
simultan gedrückt werden die LED dauerhaft leuchten zu lassen. Hierbei
kommt es zu einer komischen Auswertung seitens des mueC. Wenn ich beide
drücke, dann blinkt die LED 1x auf bevor sie dauerhaft Leuchtet.
Realisiert habe ich das über if Anweisungen, und es scheint so, als wenn
noch kurzeitig in eine der beiden anderen if Anweisungen reingegangen
wird?
Wenn ich das als Switch-Case programmiere funktioniert das einwandfrei.
Hier mal der Code:(Falls ein Syntaxfehler da sein sollt, ist der hier
entstanden.)
1 | #include <avr/io.h>
|
2 | #include <util/delay.h>
|
3 |
|
4 | void LED_an(){
|
5 | PORTD |= (1<<PD5);
|
6 | }
|
7 |
|
8 | void LED_aus(){
|
9 | PORTD &= ~(1<<PD5);
|
10 | }
|
11 |
|
12 | int main(void){
|
13 |
|
14 | DDRD |= (1<<PD5);
|
15 | DDRD &= ~((1<<PD2) | (1<<PD3));
|
16 | uint8_t RegisterD;
|
17 |
|
18 | while(1){
|
19 |
|
20 | RegisterD = PIND;
|
21 | RegisterD = RegisterD & ((1<<PD2) | (1<<PD3));
|
22 |
|
23 | if(RegisterD == ((1<<PD2) | (1<<PD3))){
|
24 | LED_an();
|
25 | }
|
26 | else if(RegisterD == (1<<PD2)){
|
27 | LED_an();
|
28 | _delay_ms(150);
|
29 | LED_aus();
|
30 | _delay_ms(150);
|
31 | }
|
32 | else if(RegisterD == (1<<PD3)){
|
33 | LED_an();
|
34 | _delay_ms(250);
|
35 | LED_aus();
|
36 | _delay_ms(250);
|
37 | }
|
38 | else {
|
39 | LED_aus();
|
40 | }
|
41 | }
|
42 | return 0;
|
43 | }
|
Schon mal Danke im Vorraus und schöne Grüße....