Erstens: warum machst du das denn soo umständlich?
Ich erwähnte schon das (mitgelieferte, und auch frei downloadbare) Tutorial.
Dort ist (wenn ich mich recht entsinne, auf Seite 3
ein Programm enthalten, was die Bibliotek der Biene komplett nutzt- es sind vielleicht gerade mal 20 Zeilen oder so.
Alles, was du an dem Programm ändern müsstest, ist, anstelle der LED`s die Motoren passend zu schalten.
Das geht also weit kürzer zu schreiben als das workwind-Programm!
Obendrein finde ich es übersichtlicher, aber das ist Angewohnheit.
Zweitens: bist du sicher, dass dein Zustandsautomat _so_ wirklich funktionieren kann?
Beispiel:
Code:
if (rval < 30) {
led_set(LED_L_RD, 0);
led_set(LED_R_RD, 1);
fahre(2);
fahre(-1);
Es wird also zuerst Zustand 2 abgearbeitet:
Code:
case 2: { /* Bremsen */
motpwm_setLeft(0);
motpwm_setRight(0);
led_set(LED_L_RD, 1);
led_set(LED_R_RD, 1);
break; }
Da die Biene (immerhin fährst du Vollgas) einen gewissen Bremsweg hat (ich habe den, auch bei niedrigeren Geschwindigkeiten, ohne Bremsrampe nie unter 5mm bekommen), wäre es durchaus denkbar, dass sie dann schon über die Linie drüber ist.
und dann würde
Code:
case -1: { /* Kreis gegen die Uhr */
motpwm_setLeft(350);
motpwm_setRight(400);
led_set(LED_L_RD, 1);
led_set(LED_R_RD, 0);
break; }
gar nicht mehr aufgerufen, weil es ja schon wieder hell ist.
Obendrein sind solche feinen Regelungen (immerhin gerade mal 50 von 1024) ohnehin so eine Sache bei der Biene, das funktioniert, wie bei mir, aktuell bei sehr sachten Kurven schon, aber für ernsthafte Lenkbewegungen musst du etwas gröber zu Werke gehen.
Dein case2 im konkreten Fall ist soo kurz, dass ich bezweifle, dass die Motoren darauf überhaupt erst reagieren, ehe case -1 aufgerufen wird- oder du schon über die Linie drüber bist.
Leg mal ein weisses Blatt auf nen dunklen Untergrund (einfach, damit du sehhhr breite Linien hast), so ist schonmal sicher dass du nicht über die Linien drüberfährst.
Dann spiel mit den Werten: Lenk gröber (da kannst du, wenn deine Biene leicht genug läuft (Getriebe!) ohne weiteres mal zwischen rechts und links 200 Unterschied geben oder gleich das innere Rad stehen lassen.
Ausserdem dürfte die Xval < 30 schon sehr, sehr schwarz sein, solche niedrigen Werte erreiche ich erst an der Tischkante, auf meinem schwarzen Papier nicht immer.
Fang an mit dem halben Wertebereich, und taste dich sachte vor bis es sauber läuft.
Ausserdem hast du den mittleren Lichtsensor auch noch, der ist zum verstärken der Lenkbewegung:
wenn(rechts schwarz)
{lenke bisschen}
wenn(mitte auch schwarz)
{lenke kräftig}
gar nicht schlecht, so hast du schon, ohne grosse Regelei, eine zweistufige Korrektur.
Lesezeichen