Normalerweiße auf 3 Dateien verteilt, hier der Einfachheit halber in einer:

Code:
#include "asuro.h"

// Prototypen
void Kollisionskontrolle (void);
void Drehung (int Grad,unsigned char Geschwindigkeit);

int main(void)
{

	Init();
	
	MotorDir(FWD,FWD);
	MotorSpeed(210,210);
	
	while(1) 
	{
		Kollisionskontrolle ();
		Msleep(5);
	}
	

	return 0;
}






void Kollisionskontrolle (void)
{
	char Zaehler = 0; // Zaehler für die Kontrolle der Taster
	int i;
	
	// Teste auf Kollision
	for (i=0; i<5; i++)
	{
		if (PollSwitch() != 0)		Zaehler++;
		
		Msleep(1);
	} 
	
	// Ist der Zahler größer als 1, so leigt eine Kollision vor
	// In diesem Fall muss anhand des Pollswitch-Wertes, der auf Zaehler übergeben wird
	// unterschieden werden wie zu reagieren ist.
	if (Zaehler > 1)		
	{
		Zaehler = PollSwitch();
		
		// Unterschiedliche Reaktionen
		
		// Stößt ganz links an - Asuro dreht 45° rechts
		if (Zaehler == 32)
		{
			// K1 gedrückt - 45° nach rechts
			Drehung(45, 150);
		}
		
		// Stößt ganz rechts an - Asuro dreht 45° nach links
		else if (Zaehler == 1)
		{
			// K6 gedrückt - 45° nach links
			Drehung(-45, 150);
		}
		
		// Stößt anders an - Asuro dreht 180°
		else
		{
			// 90° Drehung
			Drehung(180, 150);
		}
	}
}



void Drehung (int Grad,unsigned char Geschwindigkeit)
{
	int Faktor = 4;
	unsigned char Left_Speed;
	unsigned char Right_Speed;
	
	// Ursprüngliche Geschwindigkeit übernehmen
	Left_Speed = OCR1A;
	Right_Speed = OCR1B;
	
	
	// Sicherheitshalber kurz zurücksetzen
	MotorDir(RWD,RWD);
	MotorSpeed(120,120);
	Msleep(200);
	MotorSpeed(0,0);
	
	// Unterscheide Links und Rechtsdrehung
	if (Grad >0) // Rechtsdrehung
	{
		MotorDir(FWD,RWD);
		MotorSpeed(Geschwindigkeit,-Geschwindigkeit);
		Msleep(Grad * Faktor);
	}
	else // Linksdrehung
	{
		MotorDir(RWD,FWD);
		MotorSpeed(-Geschwindigkeit,Geschwindigkeit);
		Msleep(-Grad * Faktor);
	}
	
	
	
	MotorDir(FWD,FWD);
	MotorSpeed(Left_Speed,Right_Speed);
	
}