
typedef enum {SAUER, NEUTRAL, SUESS} eGeschmack;

void Led_Ein(uint8_t Led)              // LEDs auswählen
{
    // ...
}

uint16_t messe(void)
{
    uint16_t MitWert=ADC_Read_Avg(3,64);          // Mittelwert, (Eingangs-Kanal (3=ADC3), Mess-Durchläufe)
    return MitWert;
}

eGeschmack interpretiere(uint16_t messwert)
{
    if(messwert>=OBER_BEREICH)          // oberer Messbereich
        return SUESS;
    else if(messwert<=UNTER_BEREICH)        // unterer Messbereich
        return SAUER;
    else                    // mittlerer Messbereich
        return NEUTRAL;
}

void zeige_an(eGeschmack geschmack)
{
    static uint8_t Led=2;
    if(geschmack == SUESS)          // 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(geschmack == SAUER)        // 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 if (geschmack == NEUTRAL)                    // mittlerer Messbereich
    {
        Led_Ein(2);                // LED/mid ein, Rest aus + Mindest-Wartezeit
        Led=2;
    }
    else
    {
        // FEHLER anzeigen.
    }
}

void init_ports(void)
{
    DDRB = ((1<<PB2)|(1<<PB1)|(1<<PB0));      // Ausgang PB2=low, PB1=mid, PB0=high
}

int main(void)                    // Hauptprogramm
{
    init_ports;
    ADC_Init();
    while(1)                    // Endlosschleife
    {
        uint16_t messwert = messe();
        eGeschmack geschmack = interpretiere(messwert);
        zeige_an(geschmack);
        Warte(100);                  // [mSek], Wartezeit bis nächste Messwertauswertung
    }
}

