Liste der Anhänge anzeigen (Anzahl: 1)
hallo,
der ausbau des fahrgestells geht weiter, linienfolgesensoren sind dazugekommen (hier steht das fahrgestell auf der induktiven ladestation):
Anhang 31265
auch habe ich wohl den großteil (so hoffe ich zumindest) der lib "customStepper" verstanden, trotzdem gibt es da noch lücken, ich komme jetzt wieder nicht weiter:
aus dem gesamtcode habe ich die die loopschleife und die funktionen herauskopiert wo ich den fehler vermute, der ganze code schien mir zu viel und auch nicht unbedingt erforderlich, ich poste den aber gerne nach...
Problem nr.1:
nach dem starten prüft der robby ob hindernis vorhanden, wenn keines da ist, fährt er nach vorne, reagiert auf ein hindernis, in dem er auf rückwärts schaltet, allerdings sollte er nur eine umdrehung der räder von 30° durchführen, er kommt aber aus dem rückwärtsgang nicht mehr raus:
hier die loopschleife:
Code:
void loop()
{
hindernis_vorh();
if (fahrt_fertig())
{
if (hindernis == true)
{
Serial1.println("start - stepper rückwärts- hindernis if-abfrage_1");
Serial.println("start - stepper rückwärts- hindernis if-abfrage_1");
hindernis = false;
alle_stepper_rueckwaerts();
}
else
{
Serial1.println("start - stepper vorwärts- hindernis else-abfrage_1");
Serial.println("start - stepper vorwärts- hindernis else-abfrage_1");
// rechts_oder_links();
alle_stepper_vorwaerts();
}
}
fahrt_ausfuehren();
}
"fahrt fertig" und "fahrt ausführen" funktionen:
Code:
boolean fahrt_fertig()
{
return stepper[stepper_VL].isDone() && stepper[stepper_HL].isDone()
&& stepper[stepper_VR].isDone() && stepper[stepper_HR].isDone();
}
void fahrt_ausfuehren()
{
while ( ! fahrt_fertig() )
{
for (idx = stepper_VL; idx < stepper_MAX; idx++)
{
stepper[idx].run();
// delay(1);
}
}
}
"alle_stepper_vorwaerts" und "alle_stepper_rueckwaerts" funktionen:
Code:
void alle_stepper_vorwaerts(void)
{
if (fahrt_fertig()) rechts_oder_links();
if (start_ping == true) ping_distanz();
if (hindernis == true)
{
Serial1.print(hindernis);
Serial1.println(" hindernis - true - alle_stepper_rückwärts - if-abfrage_6");
Serial.print(hindernis);
Serial.println(" hindernis - true - alle_stepper_rückwärts - if-abfrage_6");
hindernis = false;
for (idx = stepper_VL; idx < stepper_MAX; idx++) //alle stepper rückwärts
{
stepper[idx].setRPM(12);
stepper[idx].setSPR(4075.7728395);
stepper[idx].setDirection(CCW);
stepper[idx].rotateDegrees(30); //rotate(1)
}
}
else
{
for (idx = stepper_VL; idx < stepper_MAX; idx++)//alle stepper vorwärts
{
stepper[idx].setRPM(12);
stepper[idx].setSPR(4075.7728395);
stepper[idx].setDirection(CW);
stepper[idx].rotateDegrees(30);//rotate(1)
}
}
}
void alle_stepper_rueckwaerts(void)
{
if (hindernis = true)
{
hindernis = false;
for (idx = stepper_VL; idx < stepper_MAX; idx++)
{
stepper[idx].setRPM(12);
stepper[idx].setSPR(4075.7728395);
stepper[idx].setDirection(CCW);
stepper[idx].rotateDegrees(30);//rotate(1)
}
}
}
problem nr.2:
ich vermute eine ähnliche ursache, wie beim problem nr.1. Der robby prüft in der funktion "alle_stepper_vorwaerts" - da er ja auf einer linie fährt - ob er evtl. nach rechts, bzw. links rotieren soll, weil die werte der beiden seitlichen IR-sensore zu unterschiedlich sind. Er gibt per print noch zurück, dass er rotiert (reagiert also auf die sich verändernden werte der sensoren li/re), rotiert aber nicht...
die funktionen "rechts_oder_links", "rotieren_links" und rotieren_rechts"
Code:
void rechts_oder_links (void)
{
read_IR ();
print_IR ();
wert_li_A0 = analogRead(Analog_Pin_0);//links
//basis_A1 = (analogRead(Analog_Pin_1) + 20); //mitte
wert_re_A2 = analogRead(Analog_Pin_2);//rechts
if (wert_li_A0 > wert_re_A2) rotieren_links();
else rotieren_rechts();
}
void rotieren_links(void)
{
rotate_li = true;
Serial1.println("rotiere_links");
Serial.println("rotiere_links");
for (idx = stepper_VL; idx < stepper_VR; idx++)
{
stepper[idx].setRPM(12);
stepper[idx].setSPR(4075.7728395);
stepper[idx].setDirection(CCW);
stepper[idx].rotateDegrees(180);//rotate(1)
}
for (idx = stepper_VR; idx < stepper_MAX; idx++)
{
stepper[idx].setRPM(12);
stepper[idx].setSPR(4075.7728395);
stepper[idx].setDirection(CW);
stepper[idx].rotateDegrees(180);//rotate(1)
}
}
void rotieren_rechts(void)
{
rotate_re = true;
Serial1.println("rotiere_rechts");
Serial.println("rotiere_rechts");
for (idx = stepper_VL; idx < stepper_VR; idx++)
{
stepper[idx].setRPM(12);
stepper[idx].setSPR(4075.7728395);
stepper[idx].setDirection(CW);
stepper[idx].rotateDegrees(180);//rotate(1)
}
for (idx = stepper_VR; idx < stepper_MAX; idx++)
{
stepper[idx].setRPM(12);
stepper[idx].setSPR(4075.7728395);
stepper[idx].setDirection(CCW);
stepper[idx].rotateDegrees(180);//rotate(1)
}
}
könnte sich jemand bitte die zeit nehmen und drüberschauen?
danke...