Dobchen
07.09.2010, 12:54
hallo alle zusammen,
hab mir am wochenende nen rp6 zugelegt und jetzt ein erstes programm geschrieben.
es funktioniert auch wie es soll, zumindest bis sich der rp6 einfach"aufhängt"
also er bleibt einfach stehen und tut nichts mehr.
immer bei einem"event" also wenn ein objekt erkannt wird oder die bumper betätigt werden.
mal nach 2 events, mal nach 20 events.
kann mir jemand nen vorschlag machen das programm eleganter umzusetzen?
bitte für mich neuling verständlich:)
danke im vorraus
hier das programm:
#include "RP6RobotBaseLib.h"
char x;
void bumpersStateChanged(void)
{
if(bumper_left)
{
x = 1;
}
if(bumper_right)
{
x = 2;
}
}
void escape(void)
{
switch(x)
{
case 1: moveAtSpeed(0,0);
move(80, BWD, DIST_MM(100), true);
rotate(70, RIGHT, 80, true);
x = 3;
break;
case 2: moveAtSpeed(0,0);
move(80, BWD, DIST_MM(100), true);
rotate(70, LEFT, 80, true);
x = 3;
break;
case 3: setLEDs(0b000000);
updateStatusLEDs();
changeDirection(FWD);
moveAtSpeed(120,140);
break;
case 4: moveAtSpeed(0,0);
setLEDs(0b000100);
updateStatusLEDs();
rotate(80, RIGHT, 50, true);
x = 3;
break;
case 5: rotate(80, LEFT, 50, true);
moveAtSpeed(0,0);
setLEDs(0b001000);
updateStatusLEDs();
x = 3;
break;
case 6: rotate(70, LEFT, 90, true);
x = 3;
break;
}
}
void acsStateChanged(void)
{
if(obstacle_left)
x = 4;
if(obstacle_right)
x = 5;
}
int main(void)
{
initRobotBase();
mSleep(1500);
x = 3;
powerON();
changeDirection(FWD);
setACSPwrMed();
ACS_setStateChangedHandler(acsStateChanged);
BUMPERS_setStateChangedHandler(bumpersStateChanged );
while(true)
{
escape();
task_RP6System();
}
return 0;
}
hoffe man kann den code lesen
Leerzeilen gelöscht und aktuellen Code von hier eingefügt:
http://www.arexx.com/forum/viewtopic.php?p=4954#p4954
von radbruch 16:10
hab mir am wochenende nen rp6 zugelegt und jetzt ein erstes programm geschrieben.
es funktioniert auch wie es soll, zumindest bis sich der rp6 einfach"aufhängt"
also er bleibt einfach stehen und tut nichts mehr.
immer bei einem"event" also wenn ein objekt erkannt wird oder die bumper betätigt werden.
mal nach 2 events, mal nach 20 events.
kann mir jemand nen vorschlag machen das programm eleganter umzusetzen?
bitte für mich neuling verständlich:)
danke im vorraus
hier das programm:
#include "RP6RobotBaseLib.h"
char x;
void bumpersStateChanged(void)
{
if(bumper_left)
{
x = 1;
}
if(bumper_right)
{
x = 2;
}
}
void escape(void)
{
switch(x)
{
case 1: moveAtSpeed(0,0);
move(80, BWD, DIST_MM(100), true);
rotate(70, RIGHT, 80, true);
x = 3;
break;
case 2: moveAtSpeed(0,0);
move(80, BWD, DIST_MM(100), true);
rotate(70, LEFT, 80, true);
x = 3;
break;
case 3: setLEDs(0b000000);
updateStatusLEDs();
changeDirection(FWD);
moveAtSpeed(120,140);
break;
case 4: moveAtSpeed(0,0);
setLEDs(0b000100);
updateStatusLEDs();
rotate(80, RIGHT, 50, true);
x = 3;
break;
case 5: rotate(80, LEFT, 50, true);
moveAtSpeed(0,0);
setLEDs(0b001000);
updateStatusLEDs();
x = 3;
break;
case 6: rotate(70, LEFT, 90, true);
x = 3;
break;
}
}
void acsStateChanged(void)
{
if(obstacle_left)
x = 4;
if(obstacle_right)
x = 5;
}
int main(void)
{
initRobotBase();
mSleep(1500);
x = 3;
powerON();
changeDirection(FWD);
setACSPwrMed();
ACS_setStateChangedHandler(acsStateChanged);
BUMPERS_setStateChangedHandler(bumpersStateChanged );
while(true)
{
escape();
task_RP6System();
}
return 0;
}
hoffe man kann den code lesen
Leerzeilen gelöscht und aktuellen Code von hier eingefügt:
http://www.arexx.com/forum/viewtopic.php?p=4954#p4954
von radbruch 16:10