mechatronikilm
21.08.2012, 16:01
Hallo, Asuro- und C-Kenner.
Bin grad dabei mir C beizubringen und nebenbei erprobe es an Asuro. Folgendes Problem habe ich: ich habe ein kleines Programm erstellt, wo Asuro in seiner Bewegung auf vordere Tastendrücken reagiert. Hier das Programm:
#include "asuro.h"
int main()
{ Init();
while(1)
{ FrontLED(ON);
MotorDir(FWD,FWD);
MotorSpeed(200,255);
Msleep(10);
if (PollSwitch() != 0)
{FrontLED(OFF);
BackLED(ON,ON);
MotorDir(RWD,RWD);
MotorSpeed(100,250);
Msleep(1000);
BackLED(OFF,OFF);}
}
return 0;
}
Wie ihr nicht schwer erkennen könnt, fährt er solange gerade aus (musste Geschwindigkeit korrigieren für Geradeausfahren, mechanische Lösung folgt). Auf jeden Fall, wenn die Taste gedrückt wird, dann fährt Asuro kurz zurück mit einer kleinen Drehung und fährt weiter. Das Problem liegt in "Msleep()". Wenn ich Msleep(); nach MotorDir(FWD,FWD), MotorSpeed() auslasse, dann fährt er nur rückwärts. Wenn ich Msleep(1000) stelle dann läuft es fehlerfrei. Wenn ich Msleep(10) lasse, dann führt er Rückwärtsbewegung zufällig auch ohne an die Wand zu stoßen. Programm sollte auch ohne Msleep(10) funktionieren, doch das tut es nicht. Für mich scheint das Programm in Ordnung zu sein, aber ich hab ja auch erst gestern angefangen :) . Es ist so als ob bei der Abarbeitung die Bedingung in if ab und zu übersprungen wird und Anweisungen ausgeführt ohne dass die Tasten gedrückt werden. Hätte jemand ein Rat, was genau im Programm falsch läuft?
Bin grad dabei mir C beizubringen und nebenbei erprobe es an Asuro. Folgendes Problem habe ich: ich habe ein kleines Programm erstellt, wo Asuro in seiner Bewegung auf vordere Tastendrücken reagiert. Hier das Programm:
#include "asuro.h"
int main()
{ Init();
while(1)
{ FrontLED(ON);
MotorDir(FWD,FWD);
MotorSpeed(200,255);
Msleep(10);
if (PollSwitch() != 0)
{FrontLED(OFF);
BackLED(ON,ON);
MotorDir(RWD,RWD);
MotorSpeed(100,250);
Msleep(1000);
BackLED(OFF,OFF);}
}
return 0;
}
Wie ihr nicht schwer erkennen könnt, fährt er solange gerade aus (musste Geschwindigkeit korrigieren für Geradeausfahren, mechanische Lösung folgt). Auf jeden Fall, wenn die Taste gedrückt wird, dann fährt Asuro kurz zurück mit einer kleinen Drehung und fährt weiter. Das Problem liegt in "Msleep()". Wenn ich Msleep(); nach MotorDir(FWD,FWD), MotorSpeed() auslasse, dann fährt er nur rückwärts. Wenn ich Msleep(1000) stelle dann läuft es fehlerfrei. Wenn ich Msleep(10) lasse, dann führt er Rückwärtsbewegung zufällig auch ohne an die Wand zu stoßen. Programm sollte auch ohne Msleep(10) funktionieren, doch das tut es nicht. Für mich scheint das Programm in Ordnung zu sein, aber ich hab ja auch erst gestern angefangen :) . Es ist so als ob bei der Abarbeitung die Bedingung in if ab und zu übersprungen wird und Anweisungen ausgeführt ohne dass die Tasten gedrückt werden. Hätte jemand ein Rat, was genau im Programm falsch läuft?