Oje:Man sollte eben mit dem Tasksystem kein sleep() verwenden ;)Code:#include "RP6RobotBaseLib.h" uint8_t i, servoposition; void acsStateChanged(void) { setLEDs(8); if(obstacle_right && obstacle_left) // beide Seiten? rotate(60, RIGHT, 100, true); else if(obstacle_left) // nur links rotate(80, RIGHT, 50, true); else if(obstacle_right) // bleibt nur noch rechts übrig rotate(80, LEFT, 50, true); changeDirection(FWD); // weiterfahren moveAtSpeed(100,100); } void bumpersStateChanged(void) { setLEDs(1); if(bumper_left || bumper_right) { changeDirection(BWD); move(100, BWD, DIST_MM(200), true); rotate(50, RIGHT, 120, true); } changeDirection(FWD); moveAtSpeed(100,100); } int main(void) { initRobotBase(); setLEDs(0b111111); mSleep(500); setLEDs(0b001001); DDRA |= 1; BUMPERS_setStateChangedHandler(bumpersStateChanged); ACS_setStateChangedHandler(acsStateChanged); powerON(); enableACS(); setACSPwrLow(); changeDirection(FWD); moveAtSpeed(100,100); servoposition=0; // 0 ist sleep(8), 1 ist sleep(23) startStopwatch1(); // Stoppuhr starten while(1) { setLEDs(0b100100); task_RP6System(); //sleep(50); // das Tasksystem muss man nicht so häufig aufzurufen if(getStopwatch1() > 2000) // zwei Sekunden sind vorbei { setStopwatch1(0); // Stoppuhr zurücksetzen setLEDs(0b010010); for(i=0; i<50; i++) // ein Sekunde lang Servo bewegen { PORTA |= 1; if(servoposition) sleep(23); else sleep(8); PORTA &= ~1; sleep(100); // Impulspause ist sleep() und Task zusammen! task_RP6System(); // beim Servoschwenken weiterfahren } if(servoposition) servoposition=0; // andere Servoposition wählen else servoposition=1; } } return(0); }
Lesezeichen