Hi, ich hab mal ein paar Dinge im Code angemerkt. Vielleicht bringt das ja was.
Code:
while(true) //Wiederholen bis Akku leer
{
taskabfrage();
Die zwei Aufrufe aus der Methode taskabfrage() kannst du auch direkt in die while Schleife packen.
Code:
case status_fahren:
task_motionControl();
setLEDs(0b001001);
Spann=readADC(ADC_BAT);
if (Spann<6.5) {
moveAtSpeed(0,0);
//blink();
}
do
task_abfrage();
//Nach ACS und Bumpern und RC5 suchen... (in Master-Abfrage)
while (move_state==status_fahren);// ...bis sich etwas geändert hat! (das gleiche wie: solange status_fahren)
break;
Gibt readADC(ADC_BAT) einen Wert > 6.5 aus?
Der task_motionControl() müsste von dem task_RP6System() aufgerufen werden, welchen du schon am Anfang der while Schleife aufrufst.
Die do-while Schleife kannst du entfernen da du task_abfrage() schon vor der switch-case Schleife aufrufst. Dadurch bleibst du auch nicht in der do-while Schleife gefangen und die Akkuspannung wird weiter überprüft. So lange der move_state == status_fahren bleibt, springt die switch-case Schleife auch immer wieder in den status_fahren Block, es gibt also keinen Grund, den Ablauf in diesem Block festzuhalten so lange der Status status_fahren bleibt.
Grüße,
Jan
Lesezeichen