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.
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;
}
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?
Lesezeichen