Ich habe nochmals am Programm weiter gearbeitet. Nun ist Meine Frage:
Kann man Odometrie und Line gemeinsam benutzen?
Code:
int lData[2], oData[2];
l1 = (lData[1]);
o1 = (oData[1]);
Momentan will ich nur je einer der beiden Werte auslesen.
Dies Funktioniert auch mit der Odometrie, leider reagiert der ASURO nicht auf Line.
[Edit]
Hat sich erledigt, habe es herausgefunden
Hier Ist nun mein fertiges Programm es wurde getestet und Funktioniert einwandfrei.
Szenario: Weisses Quadrat mit Schwarzem Rand. Darin befinden sich Hindernisse.
Der Asuro bleibt im Quadrat. Wenn er mit einem Gegenstand kollidiert, weicht er diesem aus. Die Tasten K1 und K6 sind definiert, restliche Ausweichaktionen sind zufällig (Odometrie und Radstellung).
Code:
#include "asuro.h"
//Tasten
#define K6 taste==1 //Taste 6
#define K1 taste==32 //Taste 1
//Warten
#define WAIT1 for (i=0; i<1000; i++) {Sleep(72);} //1 Sekunde
#define WAIT2 for (i=0; i<400; i++) {Sleep(72);} //90 Grad-Kurve
//Fahrten
int i,o1,l1;
int lData[2], oData[2];
char t1,t2,t3, taste;
void vorwaerts (void)
{StatusLED (GREEN);
BackLED (OFF,OFF);
MotorDir (FWD,FWD);
MotorSpeed (124,120);}
void links (void)
{StatusLED (RED);
BackLED (ON,OFF);
MotorSpeed (0,0);
WAIT1;
MotorDir (RWD,RWD);
MotorSpeed (124,120);
WAIT1;
MotorDir (FWD,RWD);
WAIT2;
MotorSpeed(0,0);
WAIT1; }
void rechts (void)
{StatusLED (RED);
BackLED (OFF,ON);
MotorSpeed (0,0);
WAIT1;
MotorDir (RWD,RWD);
MotorSpeed (124,120);
WAIT1;
MotorDir (RWD,FWD);
WAIT2;
MotorSpeed (0,0);
WAIT1;}
//Start
int main(void)
{
Init();
while (1)
{
l1 = (lData[1]);
o1 = (oData[1]);
t1 = PollSwitch();
t2 = PollSwitch();
t3 = PollSwitch();
FrontLED(ON);
LineData (lData);
OdometrieData (oData);
if (l1 < 50)
{
if (o1 > 600) {rechts();}
else {links();}
}
else if (t1 && (t1=t2) && (t1=t3))
{
taste=t1;
if (K6) {rechts();}
else if (K1) {links();}
else {
if (o1 > 600) {rechts();}
else {links();}
}
}
else {vorwaerts();}
}
return (0);
}
Lesezeichen