bole
18.03.2007, 12:21
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...
#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
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...
#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