PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Während SYSFWD mit sleep 20; fällt ACS aus Warum?



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

Dirk
29.04.2008, 21:02
Das ACS fällt nicht aus, es wird ja vom CC1-System gesteuert.
Allerdings kümmert sich die CC2, auf der dein Prog ja läuft während des Sleep nicht um die Ergebnisse des ACS, fragt das also nicht ab. D.h. Sleep ist "blockierend" für andere Aufgaben.

Gruß Dirk

P.S.: Starke Kanone! Die wird ja dann wohl auch quadratische "Kugeln" abfeuern!!?? O:)

topgunfb
30.04.2008, 00:22
Hi Dirk,

das mit Sleep is so ne sache. Ohne wackelt die "Kanone" nur wie ein Lämmerschwanz, mit fährt der Robby überall gegen. Gibt es ein Mittelding? Sodass sich die Quadratkanone langsam von links nach rechts bewegt, aber das ACS nicht blockiert?

MfG
topgunfb

P.S.: Die Kanone wird nie feuern. Wobei... ;-)

topgunfb
30.04.2008, 00:23
geht denn WAIT ?
Wohl eher auch nicht? Das bringt mir in dem Servo ding nix!

MfG
topgunfb

Dirk
30.04.2008, 13:58
Das Problem bei den Drehbewegungen der Kanone ist, dass gleichzeitig nicht das ACS gelesen wird.
Am besten machst du dir eine eigene "Drehfunktion" für die Kanone, in der du in den Schleifen regelmäßig auch das ACS abfragst.
Eine andere Möglichkeit ist nicht das Warten (Sleep), sondern das Auslesen einer "Stopwatch", wie das beim RP6 gelöst ist.
Das geht auch mit der CC2:
Da gibt es den System_Timer. Man setzt den am Anfang des "Wartens" auf 0 und fragt ihn dann in der Hauptschleife immer ab. Überschreitet er einen festgelegten Wert, ist das Warten zuende.
Vorteil: Man kann während des "Wartens" auch andere Sachen machen, z.B. das ACS lesen.

Gruß Dirk

topgunfb
09.05.2008, 16:04
Hallo,

Danke für deine Hilfe.
hab das Problem nun aber gesteckt.
Möchte gern n RP6, da ich mit den "begrentzen" Möglichkeiten, selbst mit CC2, nicht das habe, was ich will.

Wenn also einer den RP5 haben will, hier im Forum ist n neuer Thread von mir...

MfG
topgunfb