/* tastenzustand_01.c ATmega88 @ 1MHz */
#include <avr/io.h>
#include <util/delay.h>

#define button_down !(PIND & (1<<PIND2))	// Taster an PD2 = low
#define led_on PORTB |= (1<<PB0)			// PB0 = High
#define led_off PORTB &= ~(1<<PB0)			// PB0 = Low

enum button {off, on} state;	// off=0, on=1
	
int main(void)
{
	DDRB = 0xFF;			// PORTB = Ausgang
	DDRD = ~(1<<PIND2);		// PORTD PIN0 = Eingang
	
	while(1)
	{
		if (button_down)					// Wenn Taster gedrückt ist
		{
			for (uint8_t i=0; i<10; i++)	// Schleife mit 10 Durchläufen
			{
				_delay_us(1);				// Prellzeit abwarten
				
				if (button_down)			// Wenn Taster noch immer gedrückt ist
					asm ("NOP");			// nichts tun (Assembleranweisung NOP = No Operation)
				else
					i = 0;					// setze i auf 0 zurück wenn ein High detektiert wurde
			}
			
			if (state == off)				// Wenn Zustand zuvor OFF war
			{
				led_on;						// LED ON
				state = on;
			}
			
			else if (state == on)			// Wenn Zustand zuvor ON war
			{
				led_off;					// LED OFF
				state = off;
			}
			while (button_down);			// Warten bis Taster losgelassen wird
		}
	}
}