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?