Zitat Zitat von Fabian E.
Wenn du die Registrierung des Eventhandlers ausklammerst kanns auch nicht gehen.

Fabi
Die Zeile " ACS_setStateChangedHandler(ACS_EVENT_HANDLER);"ist jetzt nicht mehr auskommentiert, allerdings funktioniert das ganze immernoch nicht.

Code:
#include "RP6RobotBaseLib.h"

uint8_t rc5command;
uint8_t obstrue;
uint8_t SPEEDset;

void RC5_COMMAND(RC5data_t rc5data)
{
	rc5command = rc5data.key_code;
}
/*void ACS_EVENT_HANDLER(void)
{
	if(obstacle_left || obstacle_right)
	{
		changeDirection(RIGHT);
		writeString_P("!\n");
		while(true)
		{
			if(!obstacle_left && !obstacle_right)
			{
				changeDirection(FWD);
				break;
			}
		}
	}
}*/

void ACS_EVENT_HANDLER(void)
{
	obstrue = 1;
}

int main(void)
{
	initRobotBase();
	powerON();
	setACSPwrHigh();
	ACS_setStateChangedHandler(ACS_EVENT_HANDLER);
	IRCOMM_setRC5DataReadyHandler(RC5_COMMAND);
	uint8_t SPEED = 45;
	
	while(true)
	{
		task_motionControl();
		task_ACS();
		
		if(rc5command > 0)
		{
			switch(rc5command)
			{
				case 32: // Vorwärtstaste
					changeDirection(FWD); //Vorwärtsfahren
					break;
				case 33: //Rückwärtstaste
					changeDirection(BWD); //Rückwärtsfahren
					break;
				case 17: //Volume -
					changeDirection(LEFT);
					break;
				case 16: //Volume +
					changeDirection(RIGHT);
					break;
				case 34: //SFI
					if(SPEED < 160)
					{
						SPEED += 10; //Geschwindigkeit erhöhen
					}
					break;
				case 47: //Swap
					if(SPEED > 10)
					{
						SPEED -= 10; //Geschwindigkeit erniedrigen
					}
					break;
				case 12: //OFF-Taste (Funktioniert noch nicht richtig)
					SPEEDset = 0;
					if(SPEED > 0) //Wenn Geschwindigkeit > 0
					{
						SPEED = 0;//setze Geschwindigkeit auf 0
						SPEEDset = 1;
					}
					else if(SPEED == 0 && SPEEDset == 0)//Wenn Geschwindigkeit gleich 0
					{
						SPEED = 45;//Setze Geschwindigkeit auf 45
					}
			}
			moveAtSpeed(SPEED,SPEED);
			task_motionControl();
			rc5command = 0;
			if(obstrue == 1)
			{
				changeDirection(RIGHT);
				startStopwatch1();
				while(true)
				{
					task_motionControl();
					if(getStopwatch1() >= 100)
					{
						changeDirection(FWD);
						setStopwatch1(0);
						break;
					}
				}
				obstrue = 0;
			}
		}
	}
}