Hallo
Der Testcode für meine ersten Versuche, das Buch habe ich allerdings nicht:
"...aber bei mir funktioniert das leider nicht ganz richtig." Kann auch so ziemlich alles bedeuten, oder?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); }
Gruß
mic







Zitieren

Lesezeichen