Hallo Rabenauge,
eine letzte Idee habe ich noch.
Mit dem
analog_init();
startest du die analogen Kanäle.
Wie ich schrieb werden dabei auch die Liniensensoren bedient und 2mal abgefragt, 1mal mit eingeschalteter IR-LED und 1mal mit ausgeschalteter IR_LED.
D.h. die IR-LED des Liniensensors blinken fröhlich vor sich hin.
Als du in deiner Sharp() Routine mit dem Beschreiben von ADCSRA die ganze AD-Wandler Geschichte abgewürgt hast, konnten somit auch die IR-LED des Liniensensors nicht mehr vor sich hin blinken.
Ich vermute nun, dass die IR-LED des Liniensensors über Streuungen das Ergebnis des Sharp beeinflussen.
Ich glaube, du musst dir doch deine eigene ADC3-Routine schreiben, in der du dafür sorgst, dass die IR-LED des Liniensensors aus sind, während du den Sharp abfragst.
Die IR-LED kannst du übrigens mit einer Handy Kamera prüfen, ob sie leuchten oder nicht. Aber das dürfte sich ja mittlerweile schon rumgesprochen haben.
Die IR-LED sollten zum Zeitpunkt der ADC3-Wandlung eigentlich aus sein, wenn du dir den Code von analog.c und analog.h anschaust. Vielleicht besitzt der Sharp aber auch eine AGC (automatische Verstärkungsregelung) wie der IR-Remote-Receicer SFH5110-36 und wird von den IR-LED des Liniensensors zugestopft.
Viel Erfolg
Skroete
Lesezeichen