hallo forenuser,
folgendes problem dürfte für viele hier schnell durchschaut sein, ich finde den fehler nicht:
ich möchte durch einen pinchange interrupt eine boolvariable verändern, damit in meiner main-schleife je nach zustand der variablen in eine andere schleife gegangen wird.
Im Beispiel:
einmaliger Tastendruck -> variable = true -> in der mainschleife der if-zweig, der die led schneller blinken lässt.
erneuter tastedruck -> variable = false -> anderer (langsamer blinkender) zweig in der mainschleife.
bei erneutem druck wieder von vorne, usw usf.
nun verhält sich mein controller mit dem folgenden code aber so, als würde der wert der variablen ständig derselbe bleiben. Kann mir da jemand helfen?Code:#include <stdbool.h> #include <stdlib.h> #include <stdint.h> #include <avr/io.h> #include <avr/interrupt.h> #define F_CPU 9.6E6 #include <util/delay.h> volatile bool onoff; ISR(PCINT0_vect) { if (onoff) { onoff = false; PORTB = 0b00000000; // LED OFF _delay_ms(200); } if (!onoff) { onoff = true; PORTB = 0b00000010; // LED ON _delay_ms(200); } } int main(void) { DDRB = 0b00000010; PORTB = 0b00000000; GIMSK |= (1<<PCIE); PCMSK |= (1<<PCINT0); // TASTER auf PB0 sei(); while (1) { if (onoff) { for (int i=0; i<5; i++) { PORTB = 0b00000000; // LED OFF _delay_ms(50); PORTB = 0b00000010; // LED ON _delay_ms(50); } } else if (!onoff) { for (int i=0; i<5; i++) { PORTB = 0b00000000; // LED OFF _delay_ms(200); PORTB = 0b00000010; // LED ON _delay_ms(200); } } else PORTB = 0b00000000; // LED OFF } return 0; }







Zitieren
Lesezeichen