topgunfb
29.04.2008, 16:43
Hi,
hab da n Prob. Hoffentlich könnt ihr mir helfen.
Will meinen RP5 n bissle als "Kriegsspielzeug" aussehen lassen, dafür muss sich das Geschützrohr bewegen, während der RP5 fährt.
Hab da aber n Problem mit dem Code.
Wenn ich das Servo, welches super funktioniert solange ich den Code nicht mit der Fahrgeschichte verbinde, während des Fahrt-Codes drehen lasse, geht alles, aber das Servo wackelt nur blöd von links nach rechts. Wenn ich aber wie im Bsp. den Code mische und für die etwas langsamere Drehbewegung des Servos ein Sleep 20; in die for-Schleife einbau, funktioniert das ACS nicht mehr und der RP5 rast gegen alles was er nicht überwinden kann.
Wie muss ich da vorgehen, das sich das Servo in einer Schleife von links nach rechts bewegt, der Robby aber fährt und das ACS nutzen kann.
Hier noch der Code, mit dem es mit ACS-Pausen funktioniert:
//Kleine Demo, in der es darum geht, den Robby fahren zu lassen,
//aber auch Hindernissen ausweichen lassen.
//c by Florian Braun (topgunfb)
//19./20.04.2008
//################################################## #######################
function beep(int ton, int laenge,int pause)
{
plm.beep(ton);
sleep laenge;
plm.beep(plm.TONE_OFF);
sleep pause;
}
function SetServo1 (int Kanal, float Value)
{
int outvalue;
outvalue=700+(21*Value);
plm.out(1,outvalue);
//str.putfloatf(s1,Value,1);
}
// function FAHRE GERADEAUS UND DREHE SERVO AUF PLM1, WENN HINDERNIS IN SICHT, DANN WEICHE AUS
function testprogramm1()
{
plm.settimebase(1,1);
plm.setmode(1,0);
plm.setperiod(1,25000);
SetServo1(1,50); //Mittelstellung des Servo
loop
{
int STATUS;
ccrp5.LEDSoff();
STATUS=ccrp5.getCNSTAT();
ccrp5.setACSMAX();
float s;
if (STATUS and 0x03)==0
{ccrp5.FWD(200,200); for s = 50 ... 0 {SetServo1(1,s); sleep 20;} for s = 0 ... 100 {SetServo1(1,s); sleep 20;}}
else
if (STATUS and 0x01)>0
{ccrp5.ROTR(150,150); for s = 100 ... 0 SetServo1(1,s); for s = 0 ... 100 SetServo1(1,s);}
else
if (STATUS and 0x02)>0
{ccrp5.ROTL(150,150); for s = 100 ... 0 SetServo1(1,s); for s = 0 ... 100 SetServo1(1,s);}
}
}
//function ENDE
//MAIN-THREAD
thread main
{
int VALUE;
VALUE=ccrp5.init();
//Auszuführende function
testprogramm1();
}
//MAIN-THREAD ENDE
Hier noch n Bild, dass ihr auch was zu lachen habt:
MfG
topgunfbhttp://www.delta-designz.de/files/pics/bild_1_rp5.jpg
hab da n Prob. Hoffentlich könnt ihr mir helfen.
Will meinen RP5 n bissle als "Kriegsspielzeug" aussehen lassen, dafür muss sich das Geschützrohr bewegen, während der RP5 fährt.
Hab da aber n Problem mit dem Code.
Wenn ich das Servo, welches super funktioniert solange ich den Code nicht mit der Fahrgeschichte verbinde, während des Fahrt-Codes drehen lasse, geht alles, aber das Servo wackelt nur blöd von links nach rechts. Wenn ich aber wie im Bsp. den Code mische und für die etwas langsamere Drehbewegung des Servos ein Sleep 20; in die for-Schleife einbau, funktioniert das ACS nicht mehr und der RP5 rast gegen alles was er nicht überwinden kann.
Wie muss ich da vorgehen, das sich das Servo in einer Schleife von links nach rechts bewegt, der Robby aber fährt und das ACS nutzen kann.
Hier noch der Code, mit dem es mit ACS-Pausen funktioniert:
//Kleine Demo, in der es darum geht, den Robby fahren zu lassen,
//aber auch Hindernissen ausweichen lassen.
//c by Florian Braun (topgunfb)
//19./20.04.2008
//################################################## #######################
function beep(int ton, int laenge,int pause)
{
plm.beep(ton);
sleep laenge;
plm.beep(plm.TONE_OFF);
sleep pause;
}
function SetServo1 (int Kanal, float Value)
{
int outvalue;
outvalue=700+(21*Value);
plm.out(1,outvalue);
//str.putfloatf(s1,Value,1);
}
// function FAHRE GERADEAUS UND DREHE SERVO AUF PLM1, WENN HINDERNIS IN SICHT, DANN WEICHE AUS
function testprogramm1()
{
plm.settimebase(1,1);
plm.setmode(1,0);
plm.setperiod(1,25000);
SetServo1(1,50); //Mittelstellung des Servo
loop
{
int STATUS;
ccrp5.LEDSoff();
STATUS=ccrp5.getCNSTAT();
ccrp5.setACSMAX();
float s;
if (STATUS and 0x03)==0
{ccrp5.FWD(200,200); for s = 50 ... 0 {SetServo1(1,s); sleep 20;} for s = 0 ... 100 {SetServo1(1,s); sleep 20;}}
else
if (STATUS and 0x01)>0
{ccrp5.ROTR(150,150); for s = 100 ... 0 SetServo1(1,s); for s = 0 ... 100 SetServo1(1,s);}
else
if (STATUS and 0x02)>0
{ccrp5.ROTL(150,150); for s = 100 ... 0 SetServo1(1,s); for s = 0 ... 100 SetServo1(1,s);}
}
}
//function ENDE
//MAIN-THREAD
thread main
{
int VALUE;
VALUE=ccrp5.init();
//Auszuführende function
testprogramm1();
}
//MAIN-THREAD ENDE
Hier noch n Bild, dass ihr auch was zu lachen habt:
MfG
topgunfbhttp://www.delta-designz.de/files/pics/bild_1_rp5.jpg