Hallo Crystal Eye,
Ich schaue gerade deinen Code an und möchte dir dazu ein Paar Worte sagen. Starten wir bei main():
mit task_RP6System(); rufst du alle anderen Tasks auch auf. Du machst das also 2 mal.. (langsam)
fahrenFunktion();
if (GetStop...>3500) wirst du garnie haben, da sie nirgends im Programm gestartet wurde. (Hast du sicher aus der Anleitung kopiert 
setzen der statusLeds: Wenn du das Programm so laufen lässt, werden die Leds nur die Obstacle-Meldungen anzeigen, da die Bumper-meldungen gerade wieder überschrieben werden.
Da müstest du ev eine art wechselblinker machen,der immer 1sec Bumper- und 1sec Obstacle-meldungen anzeigt.
bumpersStateChanged(void) scheint gut.
acsStateChanged(void)
Auszug aus RP6RobotBaseLib.c
Code:
void rotate(uint8_t desired_speed, uint8_t dir, uint16_t angle, uint8_t blocking)
{
motion_status.move_L = true;
motion_status.move_R = true;
uint16_t distance = (uint16_t) (((uint32_t)(ROTATION_FACTOR) * (uint16_t)angle)/100);
preDecelerate_L = distance - 100;
preDecelerate_R = distance - 100;
preStop_L = distance;
preStop_R = distance;
if(distance < 40) {
distance = 40;
preStop_L = 20;
preStop_R = 20;
preDecelerate_L = 10;
preDecelerate_R = 10;
}
moveAtSpeed(desired_speed,desired_speed);
changeDirection(dir);
mleft_dist = 0;
mright_dist = 0;
distanceToMove_L = distance;
distanceToMove_R = distance;
motion_status_tmp = motion_status.byte;
MOTIONCONTROL_stateChangedHandler();
if(blocking)
while(!isMovementComplete())
task_RP6System();
}
Du siehst, das 3. Argument (uint16_t angle) ist eine Ganze Zahl,Integer.
Deshalb kannst du nicht schreiben ....,(obstacle_left=false),.... (wäre ja sowieso eine Zuweisung, kein Vergleich)
Da hast du wohl nur eine Lösung:
Du willst solange Rotieren, bis das ACD freie Bahn meldet.
Was heisst denn rotieren? Das hat garnichts mit dem Winkel zu tun, in unserem Fall.
Wann rotiert der RP? Wenn eine Raupe Vorwärts und die andere rückwärts dreht.
Das machst du mit:
setMotorDir(uint8_t left_dir, uint8_t right_dir); --> überzeige dich selbst, steht in der RP6RobotBaseLib.c, sogar wie anwenden.
[Edit]Oder changeDirection(LEFT/RIGHT); [/EDIT]
Wenn du jetzt also die Richtungen unterschiedlich eingestellt hast, machst du nur noch:
moveAtSpeed(uint8_t desired_speed_left, uint8_t desired_speed_right) bis die bahn frei ist, oder solange du noch ein Hindernis erkennst.
Lesezeichen