Hallo miteinander!
Ich habe seit dem umbau des Liniensensors (für US anbau) problemme mit den Motoren sie machen keine bewegung mehr wenn ich die Linienverfolgung einschalte hier mal das ProgrammDie Front Led funzt und wenn ich das Sensorsignal zwischen Pin 25 oder Pin 26 nach V+ messe habe ich bei abgedunkeltem sensor 0,4V bei Hellichkeit VCC (bei ausgebautem Prozessor).Code:#include "asuro.h" int main(void){ unsigned int data[2]; Init(); FrontLED(ON); MotorDir(FWD,FWD); while(1);{ LineData(data); if (data [0] > data [1] ) {MotorSpeed(200,150);} else {MotorSpeed(150,200);} } return 0; }
Mit anderen Programmen wie z.B. dem quadrat für die Odometrie also dem :
Funzen Die Motoren einwandfrei.Code:// ******************************************* // * Odometrie für ASURO * // * Roboter fährt ein Quadrat ab * // * * // * * // * (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}; // Startwert fr halbe Motorgeschwindigkeit signed int difference=0; unsigned int distance=0; signed int speed; int i; Init(); while(1) { switch (distance) { // Am Anfang der Strecke Vollgas case 0: MotorDir(FWD,FWD); speed=255; break; // Am Ende langsamer werden ... case 150: speed=200; break; case 160: speed=150; break; // stehen bleiben case 172: MotorDir(BREAK,BREAK); // etwas warten, bis der Roboter wirklich steht for (i=0; i<100; i++) {Sleep(255);} // auf der Stelle nach links drehen MotorDir(RWD,FWD); speed=255; // und noch vermeiden, dass die Verz�erung // mehrmals aufgerufen wird distance=173; break; case 191: speed=200; break; case 197: speed=150; break; case 201: MotorDir(BREAK,BREAK); // etwas warten, bis der Roboter wirklich steht for (i=0; i<100; i++) {Sleep(255);} MotorDir(FWD,FWD); speed=255; distance=0; break; } // 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++; distance++; } // Wechsel linker Sensor von hoch auf niedrig? if ((status[0]==HIGH) && (data[0]<TRIGGERLEVEL-HYSTERESIS)) { status[0]=LOW; difference++; distance++; } // 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<-speed) difference=-speed; if (difference>speed) difference=speed; // 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(speed-difference,speed); else MotorSpeed(speed,speed+difference); } return 0; }
HILFE!!







Zitieren

Lesezeichen