Hi,
Hab einen Linienfolger programmiert, der auch Linien mit Abzweigungen und Sackgassen folgt.
Dafür muss aber die Linie Breiter sein, als der Abstand der beiden Lichtsensoren zueinander...
Der linke Sensor muss AUF der Linie sein, der rechte NEBEN der Linie.
Der Asuro vegleicht die Sensoren unabhängig voneinander.
Also er vergleicht immer den aktuellen Wert mit dem zuletztgemessenen Wert.
z.B. der Linke Sensor: Der sollte immer auf der schwarzen Linie bleiben, d.h. der Wert ist nurmalerweise "dunkel". Wenn der Wert jetzt aber "heller" als der letztgemessene ist, lenkt der Asuro nach links (die Linienbreite verhindert, dass er je nach rechts lenken müsste).
Das gleiche macht auch der rechte Senson analog dazu...
Naja soweit so gut, aber mein Code macht nicht ganz was er sollte...
Der Asuro dreht sich einfach immer nach rechts im Kreis.
Findet ihr den Fehler?
Code:
#include <asuro.h>
int main(void)
{
Init();
FrontLED(ON);
MotorDir(FWD,FWD);
int SPEED = 150;
int lastLeft = 255, lastRight = 0;
int speedLeft, speedRight;
int lineData [2];
int i;
for (i = 0; i < 5; i++) LineData(lineData);
while(1) {
LineData(lineData);
speedLeft = speedRight = SPEED;
if (lineData[LEFT] > 1.05*lastLeft) {
speedRight = SPEED * 1.5;
speedLeft = SPEED * 0.66;
} else {
lastLeft = lineData[LEFT];
}
if (lineData[RIGHT] < 0.95*lastRight) {
speedLeft = SPEED * 1.5;
speedRight = SPEED * 0.66;
} else {
lastRight = lineData[RIGHT];
}
MotorSpeed(speedLeft, speedRight);
}
return 0;
}
Achja... The "Geschenk" is a lie!
Lesezeichen