RobotMichi
19.07.2009, 10:30
Hallo Leute,
ich hab ein Programm für den RP6 geschrieben, so ähnlich wie das Beispielprogramm Example_05_Move_05, nur weniger kompliziert:
#include "RP6RobotBaseLib.h"
void Lichtsensoren(void)
{
int x,y;
x=adcLSL;
y=adcLSR;
if(x+100 > y && x-100 < y)
{
setLEDs(0b100100);
changeDirection(FWD);
moveAtSpeed(120,120);
}
else
{
if(x > y)
{
setLEDs(0b100000);
changeDirection(LEFT);
moveAtSpeed(100,100);
}
if(y > x)
{
setLEDs(0b000100);
changeDirection(RIGHT);
moveAtSpeed(120,120);
}
}
}
// -------------- Antikollision --------------------
void Antikollision(void)
{
if(obstacle_right && obstacle_left)
{
setLEDs(0b110110);
changeDirection(RIGHT);
moveAtSpeed(120,120);
}
if(obstacle_right)
{
setLEDs(0b000110);
changeDirection(LEFT);
moveAtSpeed(120,120);
}
if(obstacle_left)
{
setLEDs(0b110000);
changeDirection(RIGHT);
moveAtSpeed(120,120);
}
if(!obstacle_right && !obstacle_right)
{
setLEDs(0b001001);
changeDirection(FWD);
moveAtSpeed(120,120);
}
}
// -------------- Main ---------------
int main(void)
{
initRobotBase();
powerON();
setACSPwrMed();
ACS_setStateChangedHandler(Antikollision);
changeDirection(FWD);
moveAtSpeed(120,120);
while(1)
{
task_RP6System();
Lichtsensoren();
}
return 0;
}
doch der RP6 nimmt keinerlei Rücksicht auf Hindernisse, das mit dem Licht funktioniert super. das mit dem kleiner und größer 100 hab ich gemacht, damit der Roboter nicht wegen jedem kleinen Unterschied hin und her fährt.
wenn ich den aufruf für die Funktion "Lichtsensoren" auskommentiere, funktioniert das ACS. Weiß jemand, woran das liegt?
MfG
Michi
ich hab ein Programm für den RP6 geschrieben, so ähnlich wie das Beispielprogramm Example_05_Move_05, nur weniger kompliziert:
#include "RP6RobotBaseLib.h"
void Lichtsensoren(void)
{
int x,y;
x=adcLSL;
y=adcLSR;
if(x+100 > y && x-100 < y)
{
setLEDs(0b100100);
changeDirection(FWD);
moveAtSpeed(120,120);
}
else
{
if(x > y)
{
setLEDs(0b100000);
changeDirection(LEFT);
moveAtSpeed(100,100);
}
if(y > x)
{
setLEDs(0b000100);
changeDirection(RIGHT);
moveAtSpeed(120,120);
}
}
}
// -------------- Antikollision --------------------
void Antikollision(void)
{
if(obstacle_right && obstacle_left)
{
setLEDs(0b110110);
changeDirection(RIGHT);
moveAtSpeed(120,120);
}
if(obstacle_right)
{
setLEDs(0b000110);
changeDirection(LEFT);
moveAtSpeed(120,120);
}
if(obstacle_left)
{
setLEDs(0b110000);
changeDirection(RIGHT);
moveAtSpeed(120,120);
}
if(!obstacle_right && !obstacle_right)
{
setLEDs(0b001001);
changeDirection(FWD);
moveAtSpeed(120,120);
}
}
// -------------- Main ---------------
int main(void)
{
initRobotBase();
powerON();
setACSPwrMed();
ACS_setStateChangedHandler(Antikollision);
changeDirection(FWD);
moveAtSpeed(120,120);
while(1)
{
task_RP6System();
Lichtsensoren();
}
return 0;
}
doch der RP6 nimmt keinerlei Rücksicht auf Hindernisse, das mit dem Licht funktioniert super. das mit dem kleiner und größer 100 hab ich gemacht, damit der Roboter nicht wegen jedem kleinen Unterschied hin und her fährt.
wenn ich den aufruf für die Funktion "Lichtsensoren" auskommentiere, funktioniert das ACS. Weiß jemand, woran das liegt?
MfG
Michi