Du kannst auch einfach folgende go-Funtkion verwenden. Als Input parameter wird die Distanz in "mm" angegeben. Funktioniert je nach Bodenbeschaffenheit relativ genau.

Gruss,
stochri

Code:
/***************************************************************************
*
*	void Go(int distance, int power = 150)                                                                         
*	
*	Go distance in mm. Attention: Encoder_Init() has to be called first.
*
*	the driven distance depends a little bit from the floor friction
*	limitations: maximum distance +-32m
*	possible problems: in full sunlight the encoder sensors may be disturbed
*
*   input
*	distance: postiv->go forward ; negativ-> go backward
*   power: sets motorpower
*
*	example:
*	
*	Encoder_Init();
*	Msleep(5000);
*	Go(200,150); 	// move 20cm vorward
*	Msleep(2000); 
*	Go(-200,150);	// move 20cm backward
*	Msleep(2000);
*
*
*	last modification:
* 	Ver.     Date         Author           Comments
* 	-------  ----------   --------------   ---------------------------------
* 	sto1     29.07.2005   stochri	       motorfunction
*	And1	 31.07.2005   Andun            added speed and Odometrie
* 	sto1     31.10.2006   stochri	       distance in mm
* 	-------  ----------   --------------   ---------------------------------
*
***************************************************************************/
void Go(int distance, int power)
{
	uint32_t enc_count;
	int tot_count = 0;
	int diff = 0;
	int l_speed = power, r_speed = power;
	
	// calculation tics/mm
	enc_count=abs(distance)*10000L;
	enc_count/=19363L;
	
	Encoder_Set(0,0);		// reset encoder

	MotorSpeed(l_speed,r_speed);
	if(distance<0) MotorDir(RWD,RWD);
	else MotorDir(FWD,FWD);

	while(tot_count<enc_count) {
		tot_count += encoder[LEFT];
		diff = encoder[LEFT] - encoder[RIGHT];
		if (diff > 0) { //Left faster than right
			if ((l_speed > power) || (r_speed > 244)) l_speed -= 10;
			else r_speed += 10;
		}
		if (diff < 0) { //Right faster than left
			if ((r_speed > power) || (l_speed > 244)) r_speed -= 10;
			else l_speed += 10;
		}
	Encoder_Set(0,0);		// reset encoder
	MotorSpeed(l_speed,r_speed);
	Msleep(1);
	}
	MotorDir(BREAK,BREAK);
	Msleep(200);
}