so, jetzt habe ich mir mal etwas genauer das RP6_Move_04_FSM2 beispielprogramm angeschaut.
bei diesem wird die move- funktionen ja in switch cases abgearbeitet. nach diesem vorbild habe ich jetzt auch mein programm abgeändert.
hier der ausschnitt:
Code:
void RP6_Bewegung(void)
{if (ir_hindernis)
{
if (!(ir_ende))
{stopStopwatch3();
writeString_P("ir ende gleich false\n");}
else {startStopwatch3();}
if (getStopwatch3() <1000 || getStopwatch3() >6000)
{move_state= 0;
}
if ((getStopwatch3() >1000 && getStopwatch3() <2000)||(getStopwatch3()>5000 && getStopwatch3() <6000))
{move_state=1;
}
switch(move_state)
{case 0:
rotate(50,RIGHT,90,NON_BLOCKING);
move_state= 2;
break;
case 1:
rotate(50,RIGHT,45,NON_BLOCKING);
move_state= 2;
break;
case 2:
if(isMovementComplete())
{ir_ende= true;
startStopwatch3();
writeString_P("ir ende gleich true\n");
}
break;
}}}
obwohl ich meiner meinng nach nach dem gleichem schema wie in diesem beispielprogramm programmiert habe, funktioniert es nicht im beispielprogramm.
ich habe nun das problem, dass der rp6 sich ständigt dreht, d.h. er dreht nicht eine bestimmte gradzahl sondern er dreht sich permanent auf der stelle.
außerdem wird ir_ende= true immer noch nicht gesetzt.
woran liegt das?
mfg
Lesezeichen