also der code von radbruch ist ja folgender:

Code:
#include "asuro.h"
#include <stdlib.h>

int main(void)
{

   unsigned char sw, speed;
   unsigned char ir,ir1,ir2;
   
   Init();
   DDRD |= (1 << DDD1);   // Port D1 als Ausgang
   PORTD &= ~(1 << PD1);   // PD1 auf LOW
   OCR2  = 0xFC;
   speed=140;

   ir = 0;
   ir1 = 0;
   ir2 = 0;
   ir3 = 0;
   ir4 = 0; 


   while(1)
   {
   ir=PIND & (1 << PD0);
   if (ir || ir1){
      BackLED(OFF,OFF);
      MotorDir(FWD,FWD);
      MotorSpeed(speed,speed);
   } else {
      BackLED(ON,ON);
      MotorDir(RWD,RWD);
      MotorSpeed(speed,speed);
      if (speed > 0) Msleep(500);
      MotorDir(BREAK,RWD);
      MotorSpeed(0,speed);
      if (speed > 0) Msleep(500);
   }
   ir2=ir1; ir1=ir;

   sw = PollSwitch();
/*
   if (sw & 0x01)
      OCR2  = 0xFE;
   if (sw & 0x02)
      OCR2  = 0xFD;
*/
   if (sw & 0x04)
      OCR2  = 0xFC;
   if (sw & 0x08)
      OCR2  = 0xFB;
/*
   if (sw & 0x10)
      OCR2  = 0xFA;
   if (sw & 0x20)
      OCR2  = 0xF9;
*/
   }
   return 0;
}
der funktioniert bei mir ausgezeichnet

jetzt hab ich wie gesagt versucht, den etwas auszubauen, bzw abzuwandeln(sind sicher auch noch einige andere fehler drin)
Code:
#include "asuro.h"
#include <stdlib.h>

int Abbiegtest();

int main(void)
{
	
   unsigned char speed,Abbiegen;
   unsigned char ir,ir1,ir2,ir3,ir4;
   
   Init();
   DDRD |= (1 << DDD1);   // Port D1 als Ausgang
   PORTD &= ~(1 << PD1);   // PD1 auf LOW
   OCR2  = 0xFE;
   speed=100;
	
   
   
   
   
   
   
   while(1)
   {
   
   ir=PIND & (1 << PD0);
   
	if (ir || ir1 || ir2 || ir3 || ir4)						// ALLES OK 
	{
		FrontLED(OFF);
		BackLED(OFF,OFF);
		MotorDir(FWD,FWD);
		MotorSpeed(speed,speed);
	} 
	else 								// HINDERNIS!!!!!!!!!!!!!!
	{
		BackLED(ON,ON);
		FrontLED(ON);
	

		/*Abbiegen = 1 & rand();  
	  
		
		if(Abbiegen == 0)				// nach links lenken
		{
			MotorSpeed(110,130);
			Msleep(300);
			
			if (Abbiegtest() == 0)		//wenn in die linke Richtung ein Hindernis kommt...
			{
				MotorSpeed(230,100);	//...eine Sekunde nach rechts lenken
				Msleep(800);
			}
			else
				continue;
		}
		else
		{
			MotorSpeed(speed,130);
			Msleep(300);
			
			if (Abbiegtest() == 0)		//wenn in die linke Richtung ein Hindernis kommt...
			{
				MotorSpeed(100,230);	//...eine Sekunde nach rechts lenken
				Msleep(800);
			}
			else
				continue;
		}*/
	
	}
	
	ir4 = ir3;
	ir3 = ir2;
	ir2 = ir1;
	ir1 = ir;  
	  
   }
   return 0;
} 


int Abbiegtest ()
	{
		unsigned char i,infr,infr1,infr2;
		
		OCR2 = 0xDE;
		
		infr = PIND & (1 << PD0);
		
		for(i=1;i<=50;i++)
		{
			if (infr||infr1)
				continue;
			else
				return 0;	// Hindernis in der Richtung
		}
		
		infr2 = infr1;
		infr1 = infr;
			
		
		return 1;			// kein Hindernis, Richtung kann weiterbehalten werden
	}
ich hab erstmal den rest vom else-teil auskommentiert, um den fehlerbereich einzugrenzen
fakt ist, lass ich in dem teil
Code:
	if (ir || ir1 || ir2 || ir3 || ir4)						// ALLES OK 
	{
		FrontLED(OFF);
		BackLED(OFF,OFF);
		MotorDir(FWD,FWD);
		MotorSpeed(speed,speed);
	}
den MotorSpeed an, springt er jedes mal nach dem Anschalten in den else-teil
Kommentier ich es aus, Fangen die LEDs erst an zu leuchten, wenn ich zb mit der Hand vor meiner IR-Abteilung rumwinke