Hallo,

ich habe ein recht komischen Vorfall.

Ich möchte den Asuro einmal um 90° links und einmal um 90° rechts drehen lassen.

Meine Funktion für links geht da ganz gut nur rechts will der nicht so recht. Da dreht er ein wenig mehr als 300°

Dazu muß ich sagen, dass ich dies über die Odometrie mache. Dafür habe ich die Schwarz/weiß flächen umgebaut. nun habe ich halb schwarz und halb silber. Somit habe ich das "Rauschen" wegbekommen und der kleine fährt eine super linie.

Hier mal mein code

Code:
#include "asuro.h"

unsigned int data[2];

	int OdoDifferenz;
	int wegzaehler=0;
	unsigned int lineData[2];
	
	char zeichen[4];
	int start=0,wechsel=0;
	int schwarz=0,silber=0;
	int odo=0;
	int exit=0;

void einmalrechts(void)
{
	schwarz=0;
	silber=0;
	start=0;
	wechsel=0;
	OdometrieData(data);
	
	if (data[0]<110)
		{
		start=0;
		wechsel=0;
		}
	else 
		{
		start=1;
		wechsel=1;
		}
	
	
	
	if(start==0)
		{
			while(schwarz<8 && silber <7)
			{
				MotorDir(FWD,FREE);
				MotorSpeed(110,0);
				OdometrieData(data);	
				if(data[0]<110 && wechsel!=0)
				{
					silber++;
					wechsel=0;
				}
				else if (data[0]>110 && wechsel!=1)
				{
					schwarz++;
					wechsel=1;
				}
				SerWrite("Silber: ",8);
				itoa(silber,zeichen,10);
				SerWrite(zeichen,sizeof(zeichen));
				SerWrite("Schwarz: ",9);
				itoa(schwarz,zeichen,10);
				SerWrite(zeichen,sizeof(zeichen));
				
			}
		}
	else 
		{
			while(schwarz<8 && silber <7)
			{
				MotorDir(FWD,FREE);
				MotorSpeed(110,0);
				OdometrieData(data);
				if(data[0]<110 && wechsel!=0)
				{
					silber++;
					wechsel=0;
				}
				else if (data[0]>110 && wechsel!=1)
				{
					schwarz++;
					wechsel=1;
				}
				
				SerWrite("Silber: ",8);
				itoa(silber,zeichen,10);
				SerWrite(zeichen,sizeof(zeichen));
				SerWrite("Schwarz: ",9);
				itoa(schwarz,zeichen,10);
				SerWrite(zeichen,sizeof(zeichen));
				
			}
		}
		
MotorSpeed(0,0);
MotorDir(FWD,FWD);
BackLED(ON,ON);
}

void undjetzt_links(void)
{
	schwarz=0;
	silber=0;
	start=0;
	wechsel=0;
	OdometrieData(data);
	
	if (data[1]<110)
		{start=0;
		wechsel=0;}
	else {start=1;
			wechsel=1;}
	
	
	
	if(start==0)
		{
			while(schwarz<8 && silber <7)
			{
			
				MotorDir(FREE,FWD);
				MotorSpeed(0,110);
				OdometrieData(data);
				
				if(data[1]<110 && wechsel!=0)
				{
					silber++;
					wechsel=0;
				}
				else if (data[1]>600 && wechsel!=1)
				{
					schwarz++;
					wechsel=1;
				}
				
			
			}
		}
	else 
		{
			while(schwarz<8 && silber <7)
			{
				MotorDir(FREE,FWD);
				MotorSpeed(0,110);
				OdometrieData(data);
				
				if(data[1]<110 && wechsel!=0)
				{
					silber++;
					wechsel=0;
				}
				else if (data[1]>600 && wechsel!=1)
				{
					schwarz++;
					wechsel=1;
				}
			}
		}
		
MotorSpeed(0,0);
MotorDir(FWD,FWD);
}

int main(void)
{

	Init();
einmalrechts();
undjetzt_links();

	return 0;
}
Evtl. kann man das noch besser lösen!!?