Hi Asuro11,
es gibt hier im Forum ein extra Asuro unterforum. Aber ich versuch dir auch hier zu helfen.
Problem ist das Asuro nicht immer gleich lang brauch für Drehungen (unterschiedliche Reibung führt z.B. zu verzögerungen) daher ist eine zeitliche Zuordnung zwischen Winkel und Geschwindigkeit nicht so leicht möglich. Du könntest aber auf deinem Untergrund durch Versuche die Zeiten ändern. Ich markiere dir dazu unten die Stellen im Quelltext.
Für genaue Drehungen gibt es die Odometrie (das Ding mit dem Schwaz-Weiß Aufkleber auf den Rädern). Da ein direkter Einstieg in die Odometrie etwas kompliziert ist solltest du vll einstmal anfangen mit der erweiterten Befehlsbibliothek von m.a.r.v.i.n. Diese gibt es hier im Asuro Unterforum. Mit dieser kannst du direkt über einen C-Befehl Asuro um eine bestimmte Gradzahl drehen lassen.
Außerdem stimmt in deinem Programm etwas nicht: Du hast 2 gleiche if Bedingungen drin. Das ist ein Logikproblem. Du willst so weit ich verstehe beim ersten Anstoßen um 90Grad drehen und beim 2. um 180. Dabei müsste der Code so aussehen:
ACHTUNG! Ich habe nur den Code so verändert das beide Anweisungen wie gewollt ausgeführt werden. Werte sind nicht korrigiert!!
Code:
#include "asuro.h"
#include "myasuro.h"
int main(void)
{
int x=1; //X Variable als Zähler einführen und auf 1 setzen
Init();
while(1)
{
MotorDir(FWD,FWD);
MotorSpeed(100,100);
Msleep(200);
if ((PollSwitch()) && (x=1)) //Wenn Tastendruck und x=1
{
MotorDir(RWD,RWD);
MotorSpeed(100,100);
Msleep(300);
MotorDir(FWD,FWD);
MotorSpeed(0,150);
Msleep(300); //80Grad Drehung
MotorDir(FWD,FWD); //Zeile kannste weg lassen
MotorSpeed(100,100); //Zeile kannste weg lassen
Msleep(200); //Zeile kannste weg lassen
x++; //x um 1 erhöhen (x wird 2)
}
if ((PollSwitch()) && (x=2)) //Wenn Tastendruck und x=2 (2. Tastendruck)
{
MotorDir(RWD,RWD);
MotorSpeed(100,100);
Msleep(300);
MotorDir(RWD,FWD);
MotorSpeed(150,150);
Msleep(300); //Drehung 90Grad (Siehe Bemerkung unten)
MotorSpeed(100,100);
Msleep(200); //+Drehung 90Grad(Siehe Bemerkung unten)
x--; //x um 1 verringern (x wird wieder 1)
}
}
}
Den Teil
Code:
MotorDir(RWD,FWD);
MotorSpeed(150,150);
Msleep(300); //Drehung 90Grad (Siehe Bemerkung unten)
MotorSpeed(100,100);
Msleep(200); //+Drehung 90Grad(Siehe Bemerkung unten)
Kanste ändern in
Code:
MotorDir(FWD,FWD);
MotorSpeed(0,150);
Msleep(300);
Msleep(300);
Im Text oben würde abwechselnd die erste if bedingung und die 2. if Bedinung eintreten also zuerst um 90Grad drehn dann um 180Grad drehn.
außerdem fehlt am ende die return 0; anweißung
Gruß
Thomas
Lesezeichen