@sternthaler
Hier der Code von Move(..). Inspiriert von Travel(..) und Rotate(..).
Allerdings bereitet Move(..) nur vor.
Die einfache encoder-Regelung (auch inspiriert von Travel(..) bzw. Rotate(..)) ist in SIGNAL (SIG_OVERFLOW2) {..} eingehängt, ähnlich wie dies für IsrRC5() in der Lib gemacht wird.
Code:
/*  @param leftSpeed left motor speed in ticks per second. positive = forward, negative = backward
 *  @param rightSpeed right motor speed in ticks per second. positive = forward, negative = backward
 *  @param distance [mm]. 
 * 		Stop if sum(leftTicks, rightTicks) > abs(distance). 
 * 		Run in background if distance<=0. 
 * 		Forever if distance==0. 
 *  @return err in number of summed ticks
 */
int Move(const int leftSpeed_, const int rightSpeed_, int distance_) {
	int tmp;
	
	Ta=0;
	if(t1==0 || Gettime()-t1>1000) {
		t1=Gettime();
		EncoderReset();
	}
	// We want to have at least 3 ticks collected from slowest encoder side and timeslot.
	// Deshalb, Suche sinnvolles Zeitintervall
	// Idea:	Ta=1000/(ticks/3)
	tmp= abs( (abs(leftSpeed_)<abs(rightSpeed_)) ? leftSpeed_ : rightSpeed_ );
	tmp= (tmp>0) ? 3*1000/tmp : 10;
	if (tmp<10) tmp=10;	//not to smal
	if (tmp>300) tmp=300;	//not to big

	// Werte für Interruptroutine
	measure=(distance_!=0);
	distance=distance_*6/10;
	leftSpeed=leftSpeed_;
	rightSpeed=rightSpeed_;
	Ta=tmp;

	while(distance>0&&distance_>0&&leftSpeed!=0&&rightSpeed!=0) mSleep(1);
	return distance;
}