PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Robby RP6 ACS Programmfehler, bitte um Hilfe.



ETchris
27.12.2011, 13:08
Schönen guten Tag,

ich habe zu Weihnachten einen Rp6 bekommen und habe sogleich mit der Programmierung begonnen.
Der Roboter soll sobald der Infrarotsensor ein Hindernis erkennt erstmal nur anhalten!

Die Bumper sind als Notaus gedacht, und funktionieren auch einwandfrei.

Wo ist der Fehler in der Software? :-(
Es gibt keine Reaktion auf ein Hindernis.
Selbsttest 100% i.O.

Das Beispielprogramm für ACS funktioniert ebenfalls, ich möchte aber noch keinen Event Handler nutzen.

Programm:


#include "RP6RobotBaseLib.h"

int main(void)
{
initRobotBase();
while(true){

powerON();
moveAtSpeed(50,50);

setLEDs(0b001001); // green LEDS on 1/4


if(getBumperLeft()||getBumperRight()){
stop();
setLEDs(0b010010);

}
mSleep(50);
task_motionControl();
task_ADC();
task_ACS(); // Infrarot aktiv


setACSPwrHigh(); // größte Reichweite der Sensoren


if(obstacle_left || obstacle_right){

moveAtSpeed(0,0); } // Anhalten wenn Hindernis erkannt!

}
return 0;
}

fulltime
27.12.2011, 17:20
Der Befehl moveAtSpeed(50,50), der als zweites in der Endlosschleife steht, solltest du vor die Schleife setzen. Denn so wie du es programmiert hast bleibt er stehen solange stehen bis er wieder bei der Scheife bei moveAtSpeed ankommt.

So wärs richtig, wenn ich mich nicht vertan habe:


#include "RP6RobotBaseLib.h"

int main(void)
{
initRobotBase();
powerON();
moveAtSpeed(50,50);
setACSPwrHigh(); // größte Reichweite der Sensoren
setLEDs(0b001001); // green LEDS on 1/4
while(true){
task_RP6System(); // Beinhaltet: task_ACD() ,task_ACS(), task_bumpers() und task_motionControl()
if(getBumperLeft()||getBumperRight()){
stop();
setLEDs(0b010010);

}
mSleep(50);


if(obstacle_left || obstacle_right)
{

moveAtSpeed(0,0);
} // Anhalten wenn Hindernis erkannt!

}
return 0;
}