Moin zusammen,


Wir arbeiten in der Schule momentan mit dem Asuro als projekt, der zusammen bau und der test einzelner programme( kollision, linie) hat wunderbar funktioniert, nun sollen unser ASURO einer linie folgen, einen Hinderniss auf der Linie ausweichen und die Linie wieder suchen und dieser folgen. Folgendes haben wir bis jetzt erreicht, doch irgendwie wissen wir nicht wie wir aus der void crash wieder in die main funktion zurück kommen. quasi endlosschleife der main...

Code:
#include "asuro.h"


//Kollisionserkennung 

Crash(void)
{
	unsigned int t1,t2;
	
	//doppelte Schalterabfrage
	t1 = PollSwitch();
	t2 = PollSwitch();
	
	if(t1 > 0 && t2 > 0 && t1 == t2)
	{
					//ASURO zurückfahren
		MotorSpeed(180,180);
		MotorDir(RWD,RWD);
		Msleep(200);
		
					//nach links drehen
		MotorDir(RWD,FWD);
		Msleep(180);
		
		
		MotorSpeed(240,240);	/*Vorwärts immer, rückwärts nimmer! */
		MotorDir(FWD,FWD);
		Msleep(1000);	

					//nach rechts drehen
		MotorDir(FWD,RWD);
		Msleep(180);

		MotorSpeed(240,240);	/*Vorwärts immer, rückwärts nimmer! */
		MotorDir(FWD,FWD);
		Msleep(1500);
		
					//nach rechts drehen
		MotorDir(FWD,RWD);
		Msleep(180);

		MotorSpeed(240,240);	/*Vorwärts immer, rückwärts nimmer! */
		MotorDir(FWD,FWD);
		Msleep(1500);

	}
}

int main(void)
{
	//ASURO initialisieren
	Init();
	
	unsigned int data[2],data_ref[6];
	int speed_left,speed_right;
	int degree5;
	int keepinline;
	int j,i=0;
	int leave=0;
	
	FrontLED(ON); //Linienverfolgungs-LED ein
	
	//hell 0	
	//dunkel 1023
	
	//Variablen initialisieren
 	data_ref[0] = 35;//60|35
	data_ref[1] = 35;//60|35
	speed_left = 202;//109
	speed_right= 200;//100
	degree5 = 29;//80
	keepinline = 15;
	
	//Geschwindigkeit einstellen
	MotorSpeed(speed_left,speed_right);
	
	while(1)
	{
	LineData(data);//Sensordaten einlesen
	MotorDir(FWD,FWD);//vorwŠrts fahren
	Crash();//Kollisionserkennung
	
	//beide Sensoren befinden sich au§erhalb der wei§en Linie
	//-> Linie muss wieder gefunden werden
	if(data[0] < data_ref[0] && data[1] < data_ref[1])
	{
	BackLED(ON,ON);//Anzeige fŸr Liniensuche
	j=17;
	leave=0;
	
	while(1)
		{
			//nach rechts drehen und Linie suchen
			for(i=0;i<j;i++)
			{
			MotorDir(FWD,RWD);
			Msleep(degree5);//Drehbewegung fŸr degree5 msec zulassen
			MotorDir(BREAK,BREAK);
			//kurze Programmunterbrechung, damit ASURO tatsŠchlich
			//zum Stillstand gekommen ist
			Msleep(keepinline);
			LineData(data);//Sensoren einlesen
			//Wenn ein Sensor im Bereich der Linie ist, Liniensuche
			//verlassen
			if(data[0] > data_ref[0] || data[1] > data_ref[1])
				{
				leave = 1;
				break;
				}
			}
			
			if(leave==1) break;
			
			//nach links drehen und Linie suchen
			for(i=0;i<35;i++)//35(41)
			{
			//Funktionsweise wie oben
			MotorDir(RWD,FWD);
			Msleep(degree5);
			MotorDir(BREAK,BREAK);
			Msleep(keepinline);
			LineData(data);
			if(data[0] > data_ref[0] || data[1] > data_ref[1])
				{
				leave = 1;
				break;
				}
			}
			
			if(leave==1) break;
			
			//Šndern der Drehweite von 175 auf 355 Grad
			j=35;
		}//while
	
	BackLED(OFF,OFF);//Liniensuche-Status-LEDs ausschalten
	
	}
	//             HELL                    DUNKEL
	else if(data[0] > data_ref[0] && data[1] < data_ref[1])
		{
		//           DUNKEL					HELL
		while(data[0] > data_ref[0] && data[1] < data_ref[1])
			{
			//nach rechts fahren
			MotorDir(BREAK,FWD);
			LineData(data);//Sensoren einlesen
			Crash();//Kollisionserkennung
			}
		}
	//Funktionsweise wie oben
	else if(data[0] < data_ref[0] && data[1] > data_ref[1])
		{
		while(data[0] < data_ref[0] && data[1] > data_ref[1])
			{
			//nach links fahren
			MotorDir(FWD,BREAK);
			LineData(data);
			Crash();
			}
		}
	}
	
	return 0;
}
könnt ihr uns vielleicht weiter helfen?

Danke schonmal
2 verzweifelte schüler