Wenn du mit den task_xxx-Methoden arbeitest, darfst du nicht solange Sleeps einbauen... und warum rufst du nach jeder Änderung wieder task_motionControl auf?
Fabi
Druckbare Version
Wenn du mit den task_xxx-Methoden arbeitest, darfst du nicht solange Sleeps einbauen... und warum rufst du nach jeder Änderung wieder task_motionControl auf?
Fabi
Ohne die Sleeps funktioniert´s auch 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;
}
}
}
}
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.Zitat:
Zitat von Fabian E.
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;
}
}
}
}
Weiss keiner woran´s liegt?