Hallo

schade dass mir keiner geschrieben hat...
Bitte entschuldige.

Du solltest besser warten bis dein neuer asuro eingetroffen ist und noch etwas üben:

Code:
#include "asuro.h"

int main(void)
{
	unsigned int data[2];
	unsigned int ododata[2];
	unsigned int odo;
	int Strecke;
	int Streckerueck;
	int diff;
	char Nummer;
	int Zahl;

	Init();
	Strecke=0;
	Streckerueck=0;
	FrontLED(ON);

	MotorDir(FWD,FWD); // Nach Init() ist MotorDir immer FWD,FWD
	StatusLED(GREEN); // und StatusLED immer grün!

// Ab hier wird der Linie gefolgt bis eine Taste gedrückt wird.
// Bei jedem Durchgang wird Strecke erhöht. Bei 8MHz geht das trotz
// kurzer Verzögeung durch LineData() rasend schnell, Strecke wird
// vermutlich mehrmals überlaufen!

	while(PollSwitch() < 2)
	{
		LineData(data);

		if (data [0] > data [1] )
		MotorSpeed(200,150);
		else
		MotorSpeed(150,200);

		Strecke++;
	}

// Beginn der eigentlichen Hauptschleife, asuro steht vor einer Wand
// Es wird deshalb mit roter StatusLED und stehenden Motoren gestartet...

	while(1)
	{
		StatusLED(RED);
		MotorSpeed(0,0);
		Nummer=0;

// ... und 5 mal im Wechsel mit den BackLEDs geblinkt...
		while (Nummer<5)
		{
			Zahl=0;
			while (Zahl<100)
			{
				Sleep(216);
				Zahl++;
			}
			Zahl=0;
			BackLED(ON,OFF);

			while (Zahl<100)
			{
				Sleep(216);
				Zahl++;
			}
			BackLED(OFF,ON);

			Nummer++;
		}

// ... dann etwas zurückstoßen um Abstand von der Wand zu gewinnen ...

		Zahl=0;
		MotorDir(RWD,RWD);
		MotorSpeed(180,180);
		BackLED(ON,ON);
		while (Zahl<350)
		{
			Sleep(216);
			Zahl++;
		}

// Was jetzt kommt blicke ich noch nicht ganz. Aber Odometrie mit
// eingeschalteten BackLeds geht schon mal gar nicht!

 		MotorDir(FWD,RWD); // langsam vorwärts fahren
		MotorSpeed(120,120);
		Zahl=0;
		while (Zahl<35) // Folgendes mehrfach ausführen (endlos wenn diff<=750!!!)
		{
			OdometrieData(ododata); // Odo-Helligkeitswerte einlesen
			odo=ododata [0]; // Linker Wert in odo speichern
			Sleep(255); // sehr kurz warten
			OdometrieData(ododata); // Werte nochmals einlesen
			diff=odo-ododata [0]; // Werte vergleichen: Wenn der erste Wert mehr
			if (diff>750) Zahl++; // als 750 größer als der Zweite ist... Wasdas?
		}

// So, das haben wir nun 35 mal gemacht und fahren weiterhin vorwärts mit 120.
// Jetzt dreht asuro nach links oder rechts bis er eine Linie erkennt. Dabei wird
// bei jedem Schleifendurchgang (auch während er die Linie noch sucht oder wenn er
// pendelt) der Schleifendurchgangszähler (Streckerueck) mit irgendwas
// (übergelaufene Strecke) verglichen. So geht das nicht! Ganz blöd wäre
// wenn Strecke zu Beginn kleiner als 100 wäre. Aber dank überlaufenden
// Variablen wird auch dann irgendwann mal abgebrochen.

		MotorDir(FWD,FWD);
		while(Strecke-Streckerueck>100)
		{
			LineData(data);

			if (data [0] > data [1] )
			MotorSpeed(200,150);
			else
			MotorSpeed(150,200);
		
			Streckerueck++;
		}
// Jetzt sollte der asuro vor der gegenüberliegenden Wand stehen ....
	}

	return 0;
}
(Nicht gestestet weil mein asuro eingemottet ist)

Gruß

mic