-
Hallo Leute,
sitze nun schon seit einigen Stunden an dem Programm, bekomme es aber absolut nicht auf die Kette, dass der Asuro der Linie folgt.
Was mach ich nur falsch?? :roll:
Brauche dringendst Hilfe.
Hamlet83
Ach so der veränderte Quellcode.
Code:
int main (void)
{
Init();
while (1)
{
t = PollSwitch();
t1 = PollSwitch();
t2 = PollSwitch();
LineData(data);
MotorFwd();
FrontLED(ON);
BackLED(OFF,OFF);
StatusLED(GREEN);
if (t==0 || t1==0 || t2==0)
{
if ((data [0] > 50) || (data [1] > 50 ))
{
if ((data [0] < 32) && (data [1] > 32 ))
{
MotorDir(RWD,FWD);
MotorSpeed(0,160);
BackLED(OFF,ON);
StatusLED(RED);
}
if ((data [1] < 32) && (data [0] > 32 ))
{
MotorDir(FWD,RWD);
MotorSpeed(160,0);
BackLED(ON,OFF);
StatusLED(RED);
}
if ((data [1] < 32) && (data [0] < 32 ))
{
MotorFwd();
BackLED(ON,ON);
StatusLED(GREEN);
}
}
else
MotorFwd();
BackLED(ON,ON);
StatusLED(GREEN);
}
else
{
if (t && t1 && (t == t1) && (t1 == t2) && (t == t2))
{
MotorStop();
if (t1 & 0x07)
{
MotorRwd();
BackLED(ON,ON);
StatusLED(RED);
for (i=0;i<400;i++)
{Sleep(255);}
MotorRwdL();
BackLED(ON,OFF);
StatusLED(RED
for (i=0;i<100;i++)
{Sleep(255);}
}
if (t2 & 0x38)
{
MotorRwd();
BackLED(ON,ON);
StatusLED(RED);
for (i=0;i<400;i++)
{Sleep(255);}
MotorRwdR();
BackLED(OFF,ON);
StatusLED(RED);
for (i=0;i<100;i++)
{Sleep(255);}
}
}
}
}
return 0;
}
Hamlet 83
-
Was fehlt? Der linie entlang gehen oder ausweichen?
-
Hallo Valen,
es fehlt die Linienerkennung.
Er erkennt diese nur, wenn er in einem besonders spitzen Winkel drüber fährt, oder ich ihn direkt drauf setze.
Fährt er z.B. 90 Grad über die Linie, fährt er einfach weiter, aber die Back LEDs leuchten kurz beim drüber fahren auf. Er steuert also nicht nach links bzw. nach rechts, um der Linie zu folgen.
Das Linienprogramm hat seperat tadellos funktioniert.
Der fehler tritt nur bei dem Quellcode auf, wo beide Programme enthalten sind.
Danke für die Unterstützung
Hamlet83
-
Hallo
Vielleicht liegt es daran dass es keine Option gibt wenn data[1] UND data[1] einen Wert über 32 liefern. Es gibt nur die Möglichkeit wenn
if ((data [1] < 32) && (data [0] < 32 ))
oder
if ((data [1] < 32) && (data [0] > 32 ))
erfolgt.
Trifft der Asuro aber zB orthogonal auf die Linie sind beide data über 50 also leuchtet die BackLED kurz aber auch beide größer als 32 also trifft keine "if" ein und der Linienteil wird übersprungen.
Gruß Thund3r
-
Hallo Thund3r,
werde Deinen Vorschlag mal einbauen.
Das ist sehr gut möglich, dass es daran liegt.
Hamlet83
-
Hallo,
an der Abfrage data[1] UND data[0] liegt es nicht, habe mehrere Varianten
ausprobiert. Habe auch die if ((data[0]>50)&&(data[1]>50)) und die zugehörige else Anweisung entfernt, da sie in dem komplett Programm keine großen Auswirkungen hat
(habe ich getestet). Diese wird aber in dem einzelnen Linienprogramm benötigt.
Was mich aber eigentlich so ratlos macht ist, dass das einzelne Linienprogramm so wie es in dem eingebundenen Quelltext steht, tadellos funktioniert.
Habe ich die beiden Programme eventuell falsch zusammen gefügt??
HILFE!!! [-o<
Hamlet83
-
Hallo Hamlet83,
hast du eine Lösung für Dein Problem gefunden, oder hast du aufgegeben?
grüsse
Michael