Hallo

"vorwärts" dürfte ja eigentlich kein Problem sein

"wenn er eine Linie sieht anhalten" ist schon schwieriger. Woran erkennt der asuro die Linie?

"kurz rückwärts fahren" auch einfach...

"90 wende nach links" Schon schwieriger. Mit Odometrie sehr kompliziert, zeitgesteuert sehr einfach.

Das wären mal grob die Teilaufgaben. Vermutlich "klemmt" es bei der Erkennung der Linie. Wenn man sicher ist, dass der asuro beim Programmstart nicht auf der Linie sondern auf dem (weisen) Untergrund steht, kann man zuerst die aktuelle Helligkeit des Untergrunds ermitteln und als Vergleichswert speichern. Aus dem Ärmel geschüttelt und ungetestet könnte das Programm dazu etwa so aussehen:
Code:
#include "asuro.h"

unsigned int data[2], startwerte[2];

int main(void)
{
	Init();
	FrontLED(ON);				// LED einschalten
	Sleep(100);					// Warten bis LED sicher volle Helligkeit erreicht hat
	LineData(startwerte);   // ADC warmlaufen lassen
	LineData(startwerte);   // Startwerte einlesen
	
	MotorSpeed(150, 150);   // Antriebe starten
	while(1)
	{
		StatusLED(RED);
		LineData(data);        // aktuelle Helligkeitswerte einlesen

		if(data[0] < (startwerte[0]-startwerte[0]/10)) StatusLED(YELLOW); // 10%
		if(data[1] < (startwerte[1]-startwerte[1]/10)) StatusLED(YELLOW);
		if((data[0]+data[1]) < ((startwerte[0]+startwerte[1])-((startwerte[0]+startwerte[1])/10))) StatusLED(YELLOW);

		if(data[0] < (startwerte[0]/2)) break; // 50%
		if(data[1] < (startwerte[1]/2)) break;;
		if(((data[0]+data[1])/2) < ((startwerte[0]+startwerte[1])/2)) break;
	}
	MotorSpeed(0,0);
	StatusLED(GREEN);
	while(1);
	return 0;
}
Gruß

mic