childen
20.01.2006, 23:31
Hallo
Ich habe jetzt seit gestern meinen Asuro fertig und damit fangen meine Probleme schon an.
Nachdem ich mich ein bisschen mit der asurolib v26 auseinander gesetzt hab, kam folgendes stück code zustande, was den Roboter eigendlich nur geradeaus fahren lassen soll und sobald er an eine Tischkannte kommt, (im dunklen Raum und heller Platte) anhalten, zurücksetzen und wenden soll.
Das 1. Problem ist das nach kurzem im Kreis fahren (anstatt geradeaus) die beiden Motoren stillstehen. Das 2. Problem ist das Ab beginn der if Abfrage die Variablen encoder[RIGHT] und encoder[LEFT] immer gleich 0 sind.
#include "asuro.h" // bitte die neue Datei benutzen
// asuro.h und asuro.c vom 31.03.05 oder neuer
int main(void)
{
unsigned int ldon[2];
unsigned int ldoff[2];
int fahr=0;
int diff=0;
int ldiff=0;
Init();
Encoder_Init();
Encoder_Start();
StartSwitch();
MotorDir(FWD,FWD);
MotorSpeed(175,175);
while (!switched && fahr==0) {
SerWrite("going\n\r",9);
MotorDir(FWD,FWD);
diff=encoder[RIGHT]-encoder[LEFT];
MotorSpeed(175+diff,175-diff);
FrontLED(OFF);
LineData(ldoff);
FrontLED(ON);
LineData(ldon);
ldiff=ldon[0]-ldoff[0];
SerWrite("\nLinks:",8);
PrintInt(encoder[LEFT]);
SerWrite("\nRechts:",9);
PrintInt(encoder[RIGHT]);
if (ldiff<100)
{
SerWrite("stopped!\n\r",12);
MotorSpeed(0,0);
MotorDir(RWD,RWD);
MotorSpeed(175,175);
SerWrite("Moveing back\n\r",16);
Encoder_Set(0,0);
Encoder_Start();
while (encoder[RIGHT] < 24)
{
diff=encoder[RIGHT]-encoder[LEFT];
MotorSpeed(175+diff,175-diff);
PrintInt(encoder[RIGHT]);
}
MotorDir(BREAK,RWD);
SerWrite("Turning\n\r",11);
Encoder_Set(0,0);
Encoder_Start();
while (encoder[RIGHT] < 50)
{
diff=encoder[RIGHT]-encoder[LEFT];
MotorSpeed(175+diff,175-diff);
PrintInt(encoder[RIGHT]);
}
}
}
MotorSpeed(0,0);
while(1);
return 0;
}
Ich habe jetzt seit gestern meinen Asuro fertig und damit fangen meine Probleme schon an.
Nachdem ich mich ein bisschen mit der asurolib v26 auseinander gesetzt hab, kam folgendes stück code zustande, was den Roboter eigendlich nur geradeaus fahren lassen soll und sobald er an eine Tischkannte kommt, (im dunklen Raum und heller Platte) anhalten, zurücksetzen und wenden soll.
Das 1. Problem ist das nach kurzem im Kreis fahren (anstatt geradeaus) die beiden Motoren stillstehen. Das 2. Problem ist das Ab beginn der if Abfrage die Variablen encoder[RIGHT] und encoder[LEFT] immer gleich 0 sind.
#include "asuro.h" // bitte die neue Datei benutzen
// asuro.h und asuro.c vom 31.03.05 oder neuer
int main(void)
{
unsigned int ldon[2];
unsigned int ldoff[2];
int fahr=0;
int diff=0;
int ldiff=0;
Init();
Encoder_Init();
Encoder_Start();
StartSwitch();
MotorDir(FWD,FWD);
MotorSpeed(175,175);
while (!switched && fahr==0) {
SerWrite("going\n\r",9);
MotorDir(FWD,FWD);
diff=encoder[RIGHT]-encoder[LEFT];
MotorSpeed(175+diff,175-diff);
FrontLED(OFF);
LineData(ldoff);
FrontLED(ON);
LineData(ldon);
ldiff=ldon[0]-ldoff[0];
SerWrite("\nLinks:",8);
PrintInt(encoder[LEFT]);
SerWrite("\nRechts:",9);
PrintInt(encoder[RIGHT]);
if (ldiff<100)
{
SerWrite("stopped!\n\r",12);
MotorSpeed(0,0);
MotorDir(RWD,RWD);
MotorSpeed(175,175);
SerWrite("Moveing back\n\r",16);
Encoder_Set(0,0);
Encoder_Start();
while (encoder[RIGHT] < 24)
{
diff=encoder[RIGHT]-encoder[LEFT];
MotorSpeed(175+diff,175-diff);
PrintInt(encoder[RIGHT]);
}
MotorDir(BREAK,RWD);
SerWrite("Turning\n\r",11);
Encoder_Set(0,0);
Encoder_Start();
while (encoder[RIGHT] < 50)
{
diff=encoder[RIGHT]-encoder[LEFT];
MotorSpeed(175+diff,175-diff);
PrintInt(encoder[RIGHT]);
}
}
}
MotorSpeed(0,0);
while(1);
return 0;
}