ok hier mit Stopwatches, funktioniert aber trotzdem noch nicht.

@Pr0gm4n: Welchen Thread meinst du denn?

Code:
#include "RP6RobotBaseLib.h"

#define KEY_LEFT 				4
#define KEY_RIGHT 				6
#define KEY_FORWARDS 			2
#define KEY_BACKWARDS 			8
#define KEY_STOP 				5
#define KEY_LEFTCURVE 			1
#define KEY_RIGHTCURVE 			3
#define KEY_LEFTCURVEBACK 		7
#define KEY_RIGHTCURVEBACK 		9
#define KEY_REWIND				60


#define MOVE_FAST 200
#define MOVE_SLOW 100

uint8_t speedvar_left;
uint8_t speedvar_right;
uint8_t array[10];
uint8_t pos = 0;
uint8_t tmp = 0;
uint8_t unstopable = false;


void receiveRC5Data(RC5data_t rc5data)
{
	// Output the received data:
	writeString_P("Toggle Bit:");
	writeChar(rc5data.toggle_bit + '0');
	writeString_P(" | Key Code:");
	writeInteger(rc5data.key_code, DEC);
	writeChar('\n');
	
	uint8_t movement_command = false;

	switch(rc5data.key_code)
	{
		case KEY_LEFT:
			speedvar_left = 0;
			speedvar_right = MOVE_FAST;
			changeDirection(FWD);
			movement_command = true;
			tmp = 4;
		break;
		case KEY_RIGHT:
			speedvar_left = MOVE_FAST;
			speedvar_right = 0;
			changeDirection(FWD);
			movement_command = true;
			tmp = 6;
		break;
		case KEY_FORWARDS:
			speedvar_left = MOVE_FAST;
			speedvar_right = MOVE_FAST;
			changeDirection(FWD);
			movement_command = true;
			tmp = 2;
		break;
		case KEY_BACKWARDS:
			speedvar_left = MOVE_FAST;
			speedvar_right = MOVE_FAST;
			changeDirection(BWD);
			movement_command = true;
			tmp = 8;
		break;
		case KEY_STOP:
			speedvar_left = 0;
			speedvar_right = 0;
			movement_command = true;
			tmp = 5;
		break;
		case KEY_LEFTCURVE:
			speedvar_left = MOVE_SLOW;
			speedvar_right = MOVE_FAST;
			changeDirection(FWD);
			movement_command = true;
			tmp = 1;
		break;
		case KEY_RIGHTCURVE:
			speedvar_left = MOVE_FAST;
			speedvar_right = MOVE_SLOW;
			changeDirection(FWD);
			movement_command = true;
			tmp = 3;
		break;
		case KEY_LEFTCURVEBACK:
			speedvar_left = MOVE_SLOW;
			speedvar_right = MOVE_FAST;
			changeDirection(BWD);
			movement_command = true;
			tmp = 7;
		break;
		case KEY_RIGHTCURVEBACK:
			speedvar_left = MOVE_FAST;
			speedvar_right = MOVE_SLOW;
			changeDirection(BWD);
			movement_command = true;
			tmp = 9;
		break;
		case KEY_REWIND:
			unstopable = true;
			pos = pos - 1;
			setStopwatch2(0);
			startStopwatch2();
			do
			{
				if(getStopwatch2() > 500)
				{
					switch(array[pos])
					{
						case KEY_LEFT:
							speedvar_left = MOVE_FAST;
							speedvar_right = 0;
							changeDirection(FWD);
						break;
						case KEY_RIGHT:
							speedvar_left = 0;
							speedvar_right = MOVE_FAST;
							changeDirection(FWD);
						break;
						case KEY_FORWARDS:
							speedvar_left = MOVE_FAST;
							speedvar_right = MOVE_FAST;
							changeDirection(BWD);
						break;
						case KEY_BACKWARDS:
							speedvar_left = MOVE_FAST;
							speedvar_right = MOVE_FAST;
							changeDirection(FWD);
						break;
						case KEY_STOP:
						break;
						case KEY_LEFTCURVE:
							speedvar_left = MOVE_FAST;
							speedvar_right = MOVE_SLOW;
							changeDirection(BWD);
						break;
						case KEY_RIGHTCURVE:
							speedvar_left = MOVE_SLOW;
							speedvar_right = MOVE_FAST;
							changeDirection(BWD);
						break;
						case KEY_LEFTCURVEBACK:
							speedvar_left = MOVE_FAST;
							speedvar_right = MOVE_SLOW;
							changeDirection(FWD);
						break;
						case KEY_RIGHTCURVEBACK:
							speedvar_left = MOVE_SLOW;
							speedvar_right = MOVE_FAST;
							changeDirection(FWD);
						break;
					}
					moveAtSpeed(speedvar_left, speedvar_right);
					pos = pos - 1;
				
					stopStopwatch2();
					setStopwatch2(0);
					startStopwatch2();
				}
				
			}while(pos > 0);
			movement_command = false;
			unstopable = false;
		break;
		
	}
	
	if(movement_command)
	{
		moveAtSpeed(speedvar_left, speedvar_right);
		array[pos] = tmp;
		pos = pos + 1;
		
	}	
	setStopwatch1(0);
	startStopwatch1();
}


void stopfunction(void)
{
	if(getStopwatch1() > 500 && unstopable == false)
	{
		moveAtSpeed(0, 0);
		stopStopwatch1();
		setStopwatch1(0);
	}
}

int main(void)
{
	initRobotBase(); 
	
	setLEDs(0b111111);
	mSleep(500);	 
	setLEDs(0b000000); 
	powerON();
	
	// Set the RC5 Receive Handler:
	IRCOMM_setRC5DataReadyHandler(receiveRC5Data);
	
	writeString_P("\n * Turn Left: "); 					writeInteger(KEY_LEFT, DEC);
	writeString_P("\n * Turn Right: "); 				writeInteger(KEY_RIGHT, DEC);
	writeString_P("\n * Move Forwards: "); 				writeInteger(KEY_FORWARDS, DEC);
	writeString_P("\n * Move Backwards: "); 			writeInteger(KEY_BACKWARDS, DEC);
	writeString_P("\n * Stop: "); 						writeInteger(KEY_STOP, DEC);
	writeString_P("\n * Move curve left forwards: "); 	writeInteger(KEY_LEFTCURVE, DEC);
	writeString_P("\n * Move curve right forwards: "); 	writeInteger(KEY_RIGHTCURVE, DEC);
	writeString_P("\n * Move curve left backwards: "); 	writeInteger(KEY_LEFTCURVEBACK, DEC);
	writeString_P("\n * Move curve right backwards: "); writeInteger(KEY_RIGHTCURVEBACK, DEC);
	
	while(true) 
	{
		stopfunction();
		task_RP6System(); // Motion Control tasks etc.
	}
	return 0;
}