Hallo
Mit SPEED gibt man die maximale Geschwindigkeit an, mit STEP die Stärke der Reaktion auf eine Abweichung von der Linie. Diese Reaktion sollte man noch vom Helligkeitsunterschied abhängig machen:
Ich kann es nicht testen weil mein asuro grad zerlegt ist.Code:#include "asuro.h" #define SPEED 175 #define STEP 5 int speedLeft,speedRight; unsigned int lineData[2]; int ADOffset; void LineLeft (void) { speedLeft += STEP; if (speedLeft > SPEED) { speedLeft = SPEED; speedRight -= STEP; } } void LineRight (void) { speedRight += STEP; if (speedRight > SPEED) { speedRight = SPEED; speedLeft -= STEP; } } int main(void) { int i; unsigned char j; Init(); FrontLED(ON); for (j = 0; j < 0xFF; j++) LineData(lineData); LineData(lineData); ADOffset = lineData[0] - lineData[1]; speedLeft = speedRight = SPEED; for(;;) { LineData(lineData); i = (lineData[0] - lineData[1]) - ADOffset; if ( i > 4) { StatusLED(GREEN); LineLeft(); } else if ( i < -4) { StatusLED(RED); LineRight(); } else { StatusLED(OFF); speedLeft = speedRight = SPEED; } MotorSpeed(speedLeft,speedRight); } return(0); }
speedLeft = speedRight = SPEED;
Das ist kritisch weil nicht sicher ist ob beide Seiten bei gleicher SPEED gleichschnell drehen wenn wir genau auf der Linie sind.
Bauchgefühlsmässig könnte nach dem MotorSpeed(speedLeft,speedRight); noch ein Sleep(100); reinpassen.
Gruß
mic







Zitieren

Lesezeichen