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...
könnt ihr uns vielleicht weiter helfen?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; }
Danke schonmal
2 verzweifelte schüler







Zitieren

Lesezeichen