So ich bin´s mal wieder...
Hab mich nun an die Odometrie gewagt und leider (wie soll es auch anderst sein) funktioniert sie nicht.
Im ASURO Band 2, soll man sich langsam an die Odometrie gewöhnen und fängt daher erstmal damit an, den ASURO geradeaus fahren zu lassen.
Leider fährt mein ASURO eine leichte Rechtskurve!
Was ist an meinem Programm falsch???

Code:
/*Geradeausfahren*/
#include "asuro.h"

//Schwellwert für die Hell/Dunkel-Unterscheidung
//Eventuell muss damit etwas variiert werden
#define TRIGGERLEVEL 600
#define HYSTERESIS 10

#define LOW 0
#define HIGH 1

int main(void)
{
	unsigned int data [2];
	signed int status [2]={0,0};
	signed int difference=0;
	
	Init();
	MotorDir(FWD,FWD);
	
	while(1) {
	
		//Helligkeitswerte der Lichtschranken auslesen
		OdometrieData(data);
		
		//Wechsel linker Sensor von niedrig auf hoch?
		if((status[0]==LOW)&&(data[0]>TRIGGERLEVEL+HYSTERESIS)) {
			status[0]=HIGH;
			difference++; }
			
		//Wechsel linker Sensor von hoch auf niedrig?
		if((status[0]==HIGH)&&(data[0]<TRIGGERLEVEL-HYSTERESIS)) {
			status[0]=LOW;
			difference++; }
			
		//Wechsel rechter Sensor von niedrig auf hoch?
		if((status[1]==LOW)&&(data[1]>TRIGGERLEVEL+HYSTERESIS)) {
			status[1]=HIGH;
			difference--; }
			
		//Wechsel rechter Sensor von hoch auf niedrig?
		if((status[1]==HIGH)&&(data[1]<TRIGGERLEVEL-HYSTERESIS)) {
			status[1]==LOW;
			difference--; }
			
		//zur Sicherheit: verhindern, dass der Differenzzähler den erlaubten Wertebereich verlässt
		if(difference<-255) difference=-255;
		if(difference>255) difference=255;
		
		//StatusLED noch entsprechend der erkannten Segmente aufleuchten lassen, grün für links, rot für rechts
		StatusLED(status[0]+status[1]*2);
		
		//Zähldifferenz passemd auf die Motoren verteilen
		if(difference>0) MotorSpeed(255-difference,255);
		else MotorSpeed(255,255+difference);
	}
return 0;
}