hab grad keine zeit deshalb fass ich mich kurz:
Die Sensoren heißen Odometer:
Hier ein Prog: Ist bei den Erweiterungsbändern dabei:
Code:// ******************************************* // * Odometrie für ASURO * // * Fährt exakt geradeaus * // * * // * * // * (c) 2007 Robin Gruber * // * Details zum Code in: * // * "Mehr Spaß mit ASURO, Band II" * // ******************************************* #include "asuro.h" // Schwellwert fr die Hell/Dunkel-Unterscheidung // Eventuell muss damit etwas variiert werden #define TRIGGERLEVEL 600 #define HYSTERESIS 10 #define LOW 0 #define HIGH 1 int main(void) { unsigned int data[2]; signed int status[2]={0,0}; signed int difference=0; Init(); MotorDir(FWD, FWD); while(1) { // Helligkeitswerte der Lichtschranken auslesen OdometrieData(data); // Wechsel linker Sensor von niedrig auf hoch? if ((status[0]==LOW) && (data[0]>TRIGGERLEVEL+HYSTERESIS)) { status[0]=HIGH; difference++; } // Wechsel linker Sensor von hoch auf niedrig? if ((status[0]==HIGH) && (data[0]<TRIGGERLEVEL-HYSTERESIS)) { status[0]=LOW; difference++; } // Wechsel rechter Sensor von niedrig auf hoch? if ((status[1]==LOW) && (data[1]>TRIGGERLEVEL+HYSTERESIS)) { status[1]=HIGH; difference--; } // Wechsel rechter Sensor von hoch auf niedrig? if ((status[1]==HIGH) && (data[1]<TRIGGERLEVEL-HYSTERESIS)) { status[1]=LOW; difference--; } // zur Sicherheit: verhindern, dass der Differenzz�ler // den erlaubten Wertebereich verl�st if (difference<-255) difference=-255; if (difference>255) difference=255; // Status-LED noch entsprechend der erkannten Segmente // aufleuchten lassen, grn fr links, rot fr rechts StatusLED(status[0]+status[1]*2); // Z�ldifferenz passend auf die Motoren verteilen if (difference>0) MotorSpeed(255-difference,255); else MotorSpeed(255,255+difference); } return 0; }







Zitieren


Lesezeichen