-
Hallo nochmal,
wenn ich
//motco_setSpeed(-50, -50);
motco_setPosition(-20,-20, 20);
das Auskommentierte durch ...setPosition... ersetze, fährt Nibo eben nicht!!! rückwärts. Das war die Frage nach dem "Befehl".
Grüß Dich, workwind!
Die Lisbeth2010
-
Hallo Lisbeth2010,
Du rufst aus dem Interrupt-Context die delay() Funktion auf! Da es sich um einen Timer-IRQ handelt, kann während des delays ein weiterer IRQ ausgelöst werden - das gibt Chaos auf dem Stack....
Es ist sicherer im Timer-IRQ nur ein Flag zu setzen, und in der main-Funktion auf dieses Flag zu warten um von dort die laufstall() Funktion aufzurufen.
Das Flag muss dabei volatile definiert werden, da ansonsten der Optimizer die Zugriffe aus der main Funktion auf die Variable wegoptimiert.
Interrupt-Programmierung hat so seine Tücken!
Code:
volatile uint8_t timer_flag;
...
ISR(TIMER2_OVF_vect) { // timer2 overflow
...
counter_2ms++;
if (counter_2ms >= WHILE_1_TIME_GRID) {
timer_flag = 1;
counter_2ms = 0;
}
}
...
int main() {
...
while (1) {
if (timer_flag) {
floor_measure_iw();
laufstall();
timer_flag=0;
}
}
}
-
Hast Du gesehen, dass ich den Timer AUSSCHALTE?
Die Lisbeth2010
-
Ach ja, hier noch der freeRTOS Link:
http://elk.informatik.fh-augsburg.de...icz_thesis.pdf
Die Lisbeth2010
-
motco_setPosition hängt von den aktuellen Odometriewerten ab. Du solltest motco_resetOdometry(0, 0) vorher aufrufen, damit motco_setPosition(-20,-20, 20) die Räder rechts und links um 20 Ticks zurückgedreht.
-
//motco_setSpeed(-50, -50);
motco_resetOdometry(0, 0);
motco_setPosition(-20, -20, 20);
motco_update();
... geht auch nicht!
Die Lisbeth2010
-
Gegenprobe:
motco_setSpeed(-50, -50);
//motco_resetOdometry(0, 0);
//motco_setPosition(-20, -20, 20);
motco_update();
...geht!
Die Lisbeth2010
-
Geht denn Folgendes?
motco_resetOdometry(20, 20);
motco_setPosition(0, 0, 20);
-
motco_resetOdometry(20, 20);
motco_setPosition(0, 0, 20);
//motco_setSpeed(-50, -50);
//motco_resetOdometry(0, 0);
//motco_setPosition(-20, -20, 20);
motco_update();
... geht auch nicht!
-
"... geht auch nicht!" heisst er zuckt nicht einmal - oder bewegt er sich so wie er nicht soll?