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:

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;
}
Hi inka,
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....