-
        

Ergebnis 1 bis 6 von 6

Thema: Während SYSFWD mit sleep 20; fällt ACS aus Warum?

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    06.04.2008
    Ort
    Rottenburg a.N.
    Alter
    34
    Beiträge
    94

    Während SYSFWD mit sleep 20; fällt ACS aus Warum?

    Anzeige

    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:

    Code:
    //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
    topgunfb
    Wer Interesse an Mangas hat, muss meine Website besuchen:
    http://www.manga-bl.de
    ---Bald auch mit RP6-Infos zu Projekten---

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.791
    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!!??

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    06.04.2008
    Ort
    Rottenburg a.N.
    Alter
    34
    Beiträge
    94
    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...
    Wer Interesse an Mangas hat, muss meine Website besuchen:
    http://www.manga-bl.de
    ---Bald auch mit RP6-Infos zu Projekten---

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    06.04.2008
    Ort
    Rottenburg a.N.
    Alter
    34
    Beiträge
    94
    geht denn WAIT ?
    Wohl eher auch nicht? Das bringt mir in dem Servo ding nix!

    MfG
    topgunfb
    Wer Interesse an Mangas hat, muss meine Website besuchen:
    http://www.manga-bl.de
    ---Bald auch mit RP6-Infos zu Projekten---

  5. #5
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.791
    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

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    06.04.2008
    Ort
    Rottenburg a.N.
    Alter
    34
    Beiträge
    94
    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
    Wer Interesse an Mangas hat, muss meine Website besuchen:
    http://www.manga-bl.de
    ---Bald auch mit RP6-Infos zu Projekten---

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •