Hallo miteinander,
ich habe jetzt auch meinen "Assi" zum Laufen gebtacht und den ersten Test mit einem primitiven Linienprogramm gemacht.
Sehr wichtig erscheint mir der Abgleich der Phototransitoren an der Unterseite des Asuro. Wenn die bei einer z.B. weißen Fläche unterschiedliche Werte erzeugen, dann gibt es auch Probleme mit der Linienverfolgung...

Das folgende kleine Programm dient zum Abgleich der beiden Phototransitoren und macht nichts anderes als die Helligkeitswerte der beiden Transistoren im Terminalprogramm auszugeben.
Ich habe nur die rote LED in der Mitte ausrichten müssen und schon habe ich einigermaßen gleiche Heligkeitswerte erhalten.

Grüße, Hans.

Hier der Quelltext für den Phototransitoren-Abgleich:
Code:
#include "asuro.h" // Prüfung der Phototransitoren
/* ------------ Line Sensor Test ---------------- */
/* Left Sensor -> Left Break LED ON when Light on 
   Left Phototransistor bright enough             */
/* Right Sensor -> Right Break LED ON when Light on 
   Right Phototransistor bright enough            */
int main(void)
{
	unsigned char tmp[2] = {OFF,OFF};
	unsigned int data[2];
	unsigned int z;
	Init();
	SerWrite("\n\r  --- Line Sensor Test ---",28);
	StatusLED(OFF);
	FrontLED(ON);
	do 
	{
		/* for(z = 1; z < 100; z++); EDIT 1: unnützer Code
		{
		}
		*/
		LineData(data);
		if (data[0] > 400) 
			tmp[0] = ON;
		else 
			tmp[0] = OFF;
		if (data[1] > 400) 
			tmp[1] = ON;
		else 
			tmp[1] = OFF;
		BackLED(tmp[0],tmp[1]);
		SerWrite("\n\r  Phototransistorwerte links/rechts: ",39);
		PrintInt(data[0]);
		SerWrite("/ ",2);
		PrintInt(data[1]);
		// SerWrite("\f",1);	//Seitenvorschub EDIT 2: bringt Fehler bei der Ausgabe
	}
	while(1);
	return 0;
}
/* END Line Sensor Test ------------------------- */
Hier der Quelltext für die Linienverfolgung:
Code:
#include "asuro.h" // Linienverfolgung auf die einfachste Art

int main(void) 
{
	unsigned int data[2]; //Speicher bereitstellen
	Init();
	FrontLED(ON); // Linienbeleuchtung einschalten	
	//MotorDir(RWD,RWD); // Beide Motoren auf rückwärts!!!!
	MotorDir(FWD,FWD); // Beide Motoren auf vorwärts
	while(1)
	{ // Endlosschleife, ASURO soll beliebig lang einer Linie nachfahren
		LineData(data); // aktuelle Helligkeitswerte der Fototransistoren einlesen
		if (data [0] > data [1] ) // links heller als rechts...
			{MotorSpeed(150,100);} // ... dann links mehr Gas geben...
		else
			{MotorSpeed(100,150);} // ... sonst rechts mehr Gas geben!
	}
return 0;
}