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
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 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?
Lesezeichen