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
Lesezeichen