Hi Jeffrey,
wenn ich das mit dem while (ecke<4) ausprobiere, dann springt er mir nicht mehr in den switch und fährt nur noch gerade aus:
Hi inka,Code:#include "asuro.h" //Schwellwert für die Hell/Dunkel-Unterscheidung //Eventuell muss damit etwas variiert werden #define TRIGGERLEVEL 680 #define HYSTERESIS 30 #define LOW 0 #define HIGH 1 int main(void) { unsigned int data [2]; signed int status [2]={0,0}; unsigned int speed=255; //Startwert für halbe Motorgeschwindigkeit signed int difference=0; unsigned int distance=0; int i; int ecke=0; Init(); MotorDir(FWD,FWD); while (ecke<4) { switch(distance) { //Am Anfang der Strecke Vollgas case 0:MotorDir(FWD,FWD); MotorSpeed(speed,speed); break; //Am Ende langsamer werden... case 215:speed=200; break; case 230:speed=150; break; //...und stehen bleiben case 251: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ögerung //mehrmals aufgerufen wird distance=252; break; /*case 282: speed=200; break; case 288: speed=150; break; case 292: MotorDir(BREAK,BREAK); for (i=0; i<100; i++) { Sleep(255); } MotorDir(FWD,FWD); speed=255; distance=0; //und noch vermeiden, dass die Verzögerung //mehrmals aufgerufen wird 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ähler den erlaubten //Wertebereich verlässt if(difference<-155) difference=-155; if(difference>155) difference=155; //StatusLED noch entsprechend der erkannten Segmente aufleuchten //lassen, grün für links, rot für rechts StatusLED(status[0]+status[1]*2); //Zähldifferenz passemd auf die Motoren verteilen if(difference>0) MotorSpeed(155-difference,155); else MotorSpeed(155,155+difference); ecke++; } return 0; }
versteh ich das richtig, dass du die strecke meinst bis ich ein Quadrat abgefahren hab??? das läge dann über 1000 und es macht auch nicht was es soll....







Zitieren
Lesezeichen