Hallo zusammen,
ich sitze gerade an meinem Asuro und möchte ihm beibringen, dass wenn er auf ein Hinderniss trifft diesem ausweicht.
Kurze Programmbeschreibung.
Wird der Asuro eingeschalten, fährt er gerade aus.
Werden Taster betätigt, soll er zuerst zurück fahren und dann in die jeweilige richtung rückwärts einbiegen und dann vorwärts fahren, bis irgendein anderer Taster gedrückt wird.
Z.B.==> Wurde ein rechten Taster betätigt, dann zuerst rückwärtsfahrt und dann rückwärts nach rechts wegbiegen.Anschließend vorwärts fahren,
bis erneut irgendein Taster betätigt.
Bin auch schon gut davor, habe aber immer noch zwei Probleme.
Folgendes tritt auf:
1.Schalte ich ihn ein fährt er sofort rückwärts und fährt dann erst vorwärts
bzw. es ist dann erst die Kollisionsabfrage möglich.
2.Wenn er fährt und es wird einTaster betätigt, dann macht er genau das was er laut Programmcode auch machen soll. ABER manchmal fährt er dann 2x rückwärts bzw. dreht sich 2x.
Woran liegt das?????
Wäre toll, wenn Ihr mir helfen könntet.
Danke schonmal im vorraus Hamlet83.
Hier mal mein Programmcode.
Code:
int main (void)
{
unsigned char t1, t2;
int i;
Init();
while(1)
{
t1 = PollSwitch();
t2 = PollSwitch();
if((t1 == 0) && (t2 == 0)) /* keine Taste */
{
MotorFwd(); /* vorwärts fahren */
FrontLED(ON);
BackLED(OFF,OFF);
}
else
if (t1 && (t1 == t2)) /*irgendeine Taste gedrückt*/
{
MotorStop();
if (t1 & 0x07) /* Tasten links gedrückt? */
{
MotorRwd(); /* Rückwärtsfahren */
BackLED(ON,ON);
StatusLED(RED);
for (i=0;i<400;i++) // for - Schleife 400 mal
{Sleep(255);} //durchlaufen, ~ 3 ms Sleep- //Funktion
MotorRwdL(); /* Rückwärtskurve links fahren */
BackLED(ON,OFF);
StatusLED(RED);
for (i=0;i<100;i++) // for - Schleife 100 mal
{Sleep(255);} //durchlaufen, ~ 3 ms Sleep-
//Funktion
}
if (t2 & 0x38) /* Tasten rechts gedrückt? */
{
MotorRwd(); /* Rückwärtsfahren */
BackLED(ON,ON);
StatusLED(RED);
for (i=0;i<400;i++) // for - Schleife 400 mal
{Sleep(255);} //durchlaufen, ~ 3 ms Sleep-
//Funktion
MotorRwdR(); /* Rückwärtskurve rechts fahren */
BackLED(OFF,ON);
StatusLED(RED);
for (i=0;i<100;i++) // for - Schleife 100 mal
{Sleep(255);} //durchlaufen, ~ 3 ms Sleep-
//Funktion
}
}
}
return 0;
}
Lesezeichen