﻿...

void Led_Ein(uint8_t Led)							// LEDs auswählen
{
	static uint8_t LetztLed = 0xFF;					// 0xFF ... undefeniert // static ... Variable überlebt nach der Funktion

	if(LetztLed != Led)
	{
		switch(Led)
		{
			case 1: LED_HIGH; Led=1; break;				// LED/high ein, Rest aus
			case 2: LED_MID; Warte(2000); Led=2; break;	// LED/mid ein, Rest aus + Mindest-Wartezeit [ms]
			default: LED_LOW; Led=3; break;				// sonst, LED/low ein, Rest aus
		}
		LetztLed=Led;
	}
}

int main(void)										// Hauptprogramm
{
	DDRB = ((1<<PB2)|(1<<PB1)|(1<<PB0));			// Ausgang PB2=low, PB1=mid, PB0=high
	uint16_t MitWert;								// Mittelwert							// LED auswahl
	uint8_t Led=2;
	
	ADC_Init();										// ADC initialize
	while(1)										// Endlosschleife
	{
		MitWert=ADC_Read_Avg(3,64);					// Mittelwert, (Eingangs-Kanal (3=ADC3), Mess-Durchläufe)

		if(MitWert>=OBER_BEREICH)					// oberer Messbereich
		{
			if(Led==3)								// von LED3 erst über LED2 nach LED1
			{
				Led_Ein(2);							// LED/mid ein, Rest aus + Mindest-Wartezeit
				Led_Ein(1);							// LED/high ein, Rest aus
				Led=1;
			}
			else
			{
				Led_Ein(1);							// LED/high ein, Rest aus
				Led=1;
			}
		}		
		else if(MitWert<=UNTER_BEREICH)				// unterer Messbereich
		{
			if(Led==1)								// von LED1 erst über LED2 nach LED3
			{
				Led_Ein(2);							// LED/mid ein, Rest aus + Mindest-Wartezeit
				Led_Ein(3);							// LED/low ein, Rest aus
				Led=3;								// LED/low ein, Rest aus
			}
			else
			{
				Led_Ein(3);							// LED/low ein, Rest aus
				Led=3;
			}
		}
		else										// mittlerer Messbereich
		{
			Led_Ein(2);								// LED/mid ein, Rest aus + Mindest-Wartezeit
			Led=2;
		}		
		Warte(100);									// [mSek], Wartezeit bis nächste Messwertauswertung
	}
}