Hallo
Mit etwas Glück und gleichmässiger Raumbeleuchtung fährt mein asuro nun mit deinem leicht geänderten Programm nach dunklen Fliesenfugen:
Nachtrag: Mit einer Geschw. Korrektur von +-5 macht er's etwas besser! Ich setze den asuro beim Start ungefähr mittig in Fahrtrichtung auf die Linie.Code:#include "asuro.h" #define SPEED 200 int speedLeft,speedRight; unsigned int lineData[2]; int ADOffset; void LineLeft (void) //fahre nach rechts zu linie { speedRight -=2; //rechts bremsen if (speedRight < 100) speedRight = 100; //min speed rechts } void LineRight (void) //fahre nach links zu linie { speedLeft -=2; //links bremsen if (speedLeft < 100) speedLeft = 100; //min speed links } void LineDemo(void) { int i; unsigned char j; FrontLED(ON); // Die folgende Mehrfachabrage der LineDatas ist völlig sinnfrei! for (j = 0; j < 255; j++) LineData(lineData); //differenzberechnung li-re // Hier beginnt der Ernst des asurolebens LineData(lineData); // bei data[0]=data[1] ist adoffset=0 d.H. der Unterschied wird einmalig // berechnet und als adoffset gespeichert das gibt Probleme bei // Helligkeitsänderungen von der Seite bei der Fahrt. // Es wird dann später auf grösser/kleiner null geprüft. ADOffset = lineData[0] - lineData[1]; speedLeft = speedRight = SPEED; MotorSpeed(speedLeft,speedRight); for(;;) { LineData(lineData); i = (lineData[0] - lineData[1]) - ADOffset; SerWrite("\n\r i: ",9); PrintInt(i); /* dadurch muss auch darauf geprüft werden, also i<0 oder i>0 aber bei i==0 darf nichts passieren, sonst ewige Kurve! deshalb vorsichtshalber 3 vollwertige ifs */ if ( i > 0 ) { //StatusLED(GREEN); BackLED(OFF,ON); //blinker rechts LineLeft(); //fahre nach rechts zu linie } if ( i < 0) { //StatusLED(RED); BackLED(ON,OFF); //blinker links LineRight(); //fahre nach links zu linie } if ( i == 0) { StatusLED(YELLOW); speedLeft = speedRight = SPEED; } MotorSpeed(speedLeft,speedRight); } } int main(void) { Init(); LineDemo (); while(1); return 0; }
Gruß
mic






Zitieren

Lesezeichen