PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Erstes Programm, brauche Hilfe



Dobchen
07.09.2010, 11: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

Dobchen
07.09.2010, 13:36
warum antwortet niemand?:-(

ps: habe absolut keine erfahrungen was C-programmieren angeht

Jaecko
07.09.2010, 13:42
Abwarten... nicht alle, die sich mit dem RP6 auskennen, sind zwischen 12:54 und 14:36 online. Das ist ein Forum, keine 24/7-Hotline. Da kanns schon mal etwas dauern.

Dobchen
07.09.2010, 13:52
ja sry, hab nur gesehen das nen paar den thread gelesen haben.
bin halt so ungeduldig weil alles neu und spannend:-)

habe jetzt nach einem hinweis in der anleitung die moveAtSpeed befehle aus dem event handler genommen.

trotzdem gleiches ergebnis

RP6conrad
07.09.2010, 21:12
Serial debugging ist das Stichwort. Das bedeutet das du auf bestimmte Stelle in ihre Program Variabele / Texte ueber die Serielle Port nach aussen gibt. so kannst du dan genau ueberwachen welche Inhalt bestimmte Variabele haben. Dafur hat der Bedienoberflache von RP6loader diese schone Function "Terminal"
Ich schlage for das du in jeden Eventhandler eine print macht von "x" . Auch in der switch function kannst du das machen.

Magelan1979
10.09.2010, 05:27
Hat das Debuggig ein bestimmtes Ergebnis gebracht?