Hallo

die unsicheren Werte in der Mitte herauszufiltern
Hier liegt wohl auch der "Fehler" in deinem Programm. Nachdem ich nun noch etwas darüber nachgedacht habe, halte ein mehrfaches Zählen ein und derselben Flanke für die Ursache der Fehlfunktion. Generell sollten vielleicht die Ausrutscher rausgefiltert werden. (z.B. mittelwerte der letzten drei..)

Ich hab früher schon mal versucht die Flanken zu erkennen. Dabei habe ich mehrere Werte auf steigende oder sinkende Folge (odo0<odo1<odo2<odo3 bzw. odo0>odo1>odo2>odo3) geprüft. Ab einem Vergleich mit 4-5 Werten funktionierte das gut:

Code:
    OdometrieData(data);
    if ((data[0]<o1_l) && (o1_l<o2_l) && (o2_l<o3_l)) {
        if (!odo_bit_l) {
            count_l ++;
            odo_bit_l=(1==1);
            StatusLED(YELLOW);
        }
    }
    if ((data[0]>o1_l) && (o1_l>o2_l) && (o2_l>o3_l)) {
        if (odo_bit_l) {
            count_l ++;
            odo_bit_l=(1==0);
            StatusLED(OFF);
       }
    }
    o3_l=o2_l;
    o2_l=o1_l;
    o1_l=data[0];
Wenn sich das Rad dreht, blinkt die StatusLED im Rythmus der Flanken und der Counter wird erhöht.