Hallo

Der Testcode für meine ersten Versuche, das Buch habe ich allerdings nicht:

Code:
#include "asuro.h"

// Code für das SnakeVision stammt von hier:

// *******************************************
// * Snakevision für ASURO                   *
// * Verfolgt eine Wärmequelle               *
// *                                         *
// *                                         *
// *                                         *
// *                                         *
// * (c) 2007 Robin Gruber                   *
// * Details zum Code in:                    *
// * "Mehr Spaß mit ASURO, Band II"          *
// *******************************************
void SnakeData(unsigned int *data)
{
	// ThermalData() funktioniert genauso, wie LineData(), ...
	// ... nur dass dabei die interne Spannungsreferenz als ...
	// ... AD-Wandlerreferenz verwendet wird.

	// Prozessorinterne Referenz verwenden
	// Multiplexer auf linken Sensor schalten
	ADMUX = (1 << REFS0) | (1 << REFS1) | IR_LEFT;
	// Wandlung starten
	ADCSRA |= (1 << ADSC);
	// Warten, bis Wandlung beendet
	while (!(ADCSRA & (1 << ADIF)));
	// ADCIF zurücksetzen
	ADCSRA |= (1 << ADIF);
	// ADC-Wert auslesen
	data[0] = ADCL + (ADCH << 8);

	// Prozessorinterne Referenz verwenden
	// Multiplexer auf rechten Sensor schalten
	ADMUX = (1 << REFS0) | (1 << REFS1) | IR_RIGHT;
	// Wandlung starten
	ADCSRA |= (1 << ADSC);
	// Warten, bis Wandlung beendet
	while (!(ADCSRA & (1 << ADIF)));
	// ADCIF zurücksetzen
	ADCSRA |= (1 << ADIF);
	// ADC-Wert auslesen
	data[1] = ADCL + (ADCH << 8);
}

int main(void)
{
	unsigned int data[2];
	Init();

	while(1)
	{
	SnakeData(data);
	if(data[0]>data[1])
	{
	   MotorDir(RWD,FWD);
	   MotorSpeed(150,150);
	}
	else
	{
	   MotorDir(FWD, RWD);
	   MotorSpeed(150, 150);
	}
	PrintInt(data[0]);
	SerPrint("-");
	PrintInt(data[1]);
	SerPrint("\n\r");
	//Beep(300);
	Msleep(300);
	}
	return(0);
}
"...aber bei mir funktioniert das leider nicht ganz richtig." Kann auch so ziemlich alles bedeuten, oder?

Gruß

mic