Code:
# include "asuro.h"
# define sin_d(x) (sin((x)*M_PI/180))
int main(void)
{
Init();
char Ende=1;
char DatenEmpfangen=1;
int r=100;
int l=100;
int g=45;
int h;
int helligkeit=100;
int u=150;
int v=100;
int i;
const int DAUERGELB1=500;
const int DAUERGELB2=1000;
const int DAUERGRUEN=5000;
const int DAUERROT=3000;
unsigned char LINIE='1';
unsigned char ABGRUND='2';
unsigned char AMPEL='3';
unsigned char KREIS='4';
unsigned char ECK='5';
unsigned char FF='6';
unsigned char STOPP='0';
unsigned char Winkel;
unsigned char Geschwindigkeit=100;
unsigned char Distanz;
unsigned char Radius=100;
unsigned char p;
unsigned int n[1];
unsigned char N;
unsigned char daten[1];
unsigned int info;
unsigned int data[2];
unsigned int end[1];
unsigned char E;
EncoderInit();
LineData(data);
while(1)
{
beginn:
if(DatenEmpfangen == 1 && Ende == 1)
{
SerRead(&daten, 1, 0);
info = daten;
Ende=0;
StatusLED(YELLOW);
if(info == '1')
{
SerWrite("Zeichen empfangen !!\r\n",25);
}
}
else if(Ende == 0)
{
//Linie:L
if(info == LINIE)
{
while(Ende == 0)
{
LineData(data);
StatusLED(GREEN);
if(data[0]<data[1])
{
BackLED(OFF,ON);
r=r+g;
l=l-g;
MotorDir(FWD, FWD);
MotorSpeed(l, r);
}
if(data[1]<data[0])
{
BackLED(ON,OFF);
l=l+g;
r=r-g;
MotorDir(FWD, FWD);
MotorSpeed(l, r);
}
if(data[1]=data[0])
{
MotorDir(FWD, FWD);
MotorSpeed(l, r);
}
l=100;
r=100;
SerRead (&end, 1, 1);
E=end[0];
if(E == STOPP)//STOPP
{
Ende=1;
DatenEmpfangen=1;
}
}
}
//Abgrund:G
else if(info == ABGRUND)
{
while(Ende == 0)
{
LineData(data);
StatusLED(GREEN);
if((data[0]>helligkeit && data[1]>helligkeit) || Ende == 1)
{
StatusLED(RED);
Msleep(1);
MotorDir(FWD, FWD);
MotorSpeed(BREAK, BREAK);
}
else
{
StatusLED(GREEN);
MotorDir(FWD, FWD);
MotorSpeed(u, u);
}
SerRead (&end, 1, 1);
E=end[0];
if(E == STOPP)//STOPP
{
Ende=1;
DatenEmpfangen=1;
}
}
}
//Ampel:A
else if(info == AMPEL)
{
while(Ende == 0)
{
StatusLED(GREEN);
for(i = 1; i<=40; i++) //Initialisierung; Bedingung; Reinitialisierung
{
StatusLED(RED);
Msleep (DAUERROT);
StatusLED (YELLOW);
Msleep (DAUERGELB1);
StatusLED (GREEN);
Msleep (DAUERGRUEN);
StatusLED (YELLOW);
Msleep (DAUERGELB2);
}
BackLED(OFF, OFF);
StatusLED(GREEN);
Ende=1;
DatenEmpfangen=1;
}
}
//Kreis:K
else if(info == KREIS)
{
while(Ende == 0)
{
StatusLED(GREEN);
MotorDir(FWD, FWD);
MotorSpeed(200, 100);
Msleep(6000);
SerRead (&end, 1, 1);
E=end[0];
if(E == STOPP)//STOPP
{
Ende=1;
DatenEmpfangen=1;
}
}
Ende=1;
DatenEmpfangen=1;
}
//n-Eck:N
else if(info == ECK)
{
StatusLED(YELLOW);
SerRead(&n, 1, 1);
N=n[0];
Winkel=(N-2)+180;
p=N;
Distanz=(sin(Winkel))*Radius;
StatusLED(GREEN);
for(p; p<N;p++)
{
GoTurn(Distanz, Winkel, Geschwindigkeit);
}
SerRead (&end, 1, 1);
E=end[0];
if(E == STOPP)//STOPP
{
Ende=1;
DatenEmpfangen=1;
}
}
//Feuerwehr:F
else if(info == FF)
{
p=0;
StatusLED(GREEN);
for(p; p<100; p++)
{
StatusLED(RED);
BackLED(OFF, ON);
MotorDir(FWD, FWD);
MotorSpeed(200, 200);
Msleep(300);
BackLED(ON, OFF);
MotorSpeed(200, 200);
SerRead (&end, 1, 1);
E=end[0];
if(E == STOPP)//STOPP
{
Ende=1;
DatenEmpfangen=1;
MotorSpeed(0, 0);
StatusLED(OFF);
BackLED(OFF, OFF);
}
}
MotorSpeed(0, 0);
StatusLED(OFF);
BackLED(OFF, OFF);
Ende=1;
DatenEmpfangen=1;
}
else
{
}
}
else
{
goto beginn;
}
}
while(1);
return(0);
}
Lesezeichen