Mk1.12.91
25.04.2010, 14:50
hallo
ich möchtemeinem asuro beibringen je nach taste auf der tastaur einen anderen modus auszuführen also ein anderes programm ab zu spielen
die inzelnen programme habe ich auch zusammenkopiert nur leider speichert sich die gedrückte taste nicht in der variable daten
--später will ich das noch mit vb ergänzen
aber erstmal sollte es mit ht funktionieren ....
ich hoffe ihr könnt mir helfen ...
hier der quellcode:
# 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);
}
ich möchtemeinem asuro beibringen je nach taste auf der tastaur einen anderen modus auszuführen also ein anderes programm ab zu spielen
die inzelnen programme habe ich auch zusammenkopiert nur leider speichert sich die gedrückte taste nicht in der variable daten
--später will ich das noch mit vb ergänzen
aber erstmal sollte es mit ht funktionieren ....
ich hoffe ihr könnt mir helfen ...
hier der quellcode:
# 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);
}