Hallo

BackLEDs und Odometrie sollte man nicht zusammen verwenden, weil sie sich den Pin PD7 teilen. Zwar wird von BackLEDs() und OdometrieData() jeweils der Pegel richtig eingestellt (Odo=high, BackLEDs=low), aber die Odo-LEDs brauchen etwas Zeit bis sie die volle Leuchtstärke erreichen. Das könnte die Abfrage der Odo-Sensoren beinflussen.

Bei näherer Betrachtung scheint mir hier sogar noch ein kleiner Bug zu sein: BackLEDs(ON,ON) schaltet den PD7 auf low und PC0/1 auf Ausgang und high:

Code:
		PORTD &= ~(1 << PD7); // Wheel LED OFF
		DDRC |= (1 << PC0) | (1 << PC1); // Output => no odometrie
		PORTC |= (1 << PC0) | (1 << PC1);
und OdometrieData() schaltet den PD7 auch wieder auf high (ODOMETRIE_LED_ON) und die Pins PC0/1 auch wieder auf Eingang für den ADC, "vergisst" aber die Pullups wieder auszuschalten!
Code:
	DDRC &= ~((1 << PC0) | (1 << PC1)); // Input => no break LED
	ODOMETRIE_LED_ON;
Das bedeutet, vor OdometrieData() muss man BackLEDs(OFF,OFF) aufrufen um die Pins von Hand auf low zu schalten. Sonst sind die PullUps parallel zu R18/R20 geschaltet und könnten zusätzlich das Ergebniss von OdometrieData() verfälschen. (Das funktioniert im Programm oben automatisch, weil immer der else-Zeig ausgeführt wird;)

Das die Abfrage data[0]==1 nicht funktioniert sollte inzwischen klar sein. Der Wert in data[] hängt von der gemessenen Helligkeit am Odosensor ab.

Gruß

mic