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

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

uint16_t ButtonCounter = 0;

int main(void)
{
	DDRB = 0xFF;		// PORTB = Ausgang
	DDRD = ~(1<<PD2);	// PD2 = Eingang
	
	while(1)
	{
		if (button_down)					// wenn Taster gedrückt
		{
			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
			}
			
			ButtonCounter = 0;				// Button counter set to 0
			
			while (button_down)				// So long as button pressed (PB2 = Int0)
			{
				ButtonCounter ++;			// increment Button counter
				_delay_ms(1);
				
				if (ButtonCounter >= 700)	// if button pressed long
				{
					led_off;
					ButtonCounter --;		// Button counter = 699
				}
			}
			
			if (ButtonCounter <= 698)		// if button pressed short
			{
				led_on;
				ButtonCounter = 0;			// Button counter set to 0
			}
		}
	}
}