- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 17

Thema: Ein ganz simples Kollisionsprogramm

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    07.12.2008
    Beiträge
    31

    Ein ganz simples Kollisionsprogramm

    Anzeige

    Praxistest und DIY Projekte
    Hallo erstmal.

    Ich weiß, dass dieses Thema hier schon des öfteren angesprochen wurde, aber die Suchfunktion hat leider keine Threads gefunden, die mir weiterhelfen.
    Und zwar gehts um folgendes:

    Ich möchte ein ganz einfaches Programm schreiben, mit dem der Asuro solange geradeaus fährt (Natürlich ohne Hilfe der Lichtschranken, es soll ja ein simples Programm sein.), bis er mit den Kollisionstastern irgendwo anstösst. Wenn das passiert, soll er kurz rückwärts fahren, eine 90°-Drehung machen, und dann wieder weiter geradeaus fahren, bis er wieder irgendwo gegenfährt. Ihr müsst wissen, dass ich noch ein totaler Anfänger im programmieren bin! Ich kam in letzter Zeit nicht oft dazu, mich um meinen Asuro zu kümmern.

    Meine Frage: Wie muss dieses Programm ungefähr aussehen?

  2. #2
    Neuer Benutzer
    Registriert seit
    28.02.2008
    Alter
    32
    Beiträge
    4
    https://www.roboternetz.de/phpBB2/ze...er=asc&start=0

    vielleicht hilft dir das weiter..
    MfG

    IC

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    02.01.2008
    Alter
    32
    Beiträge
    239
    hallo James C.

    hier einmal nur wie es vom aufbau her aussehen könnte
    Code:
    int main()
    {
      while(1)  //endlosschleife
      {
        if(keinen taster gedrückt)
        {
          //gerade aus fahren (zb. MotorDir(FWD,FWD); MotorSpeed(200,200);)
        }
        else
        {
          //drehung (zb. MotorDir(RWD,RWD); MotorSpeed(0,150);)
          //best. zeit warten, richtet sich nach der geschwindigkeit, um 90° zu drehen
    
        }
      }
    }
    den code dazu musst du nun selber schreiben, wenn du hilfe braucht melde dich einfach

    ich hoffe, das hat dir weitergeholfen
    mfg hai1991

    P.S.: wer großbuchstaben oder rechtschreibfehler findet darf sie behalten

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    07.12.2008
    Beiträge
    31
    Danke für eure Antworten!

    Also ich habe jetzt mal dieses Programm Angefangen:

    Code:
    #include "asuro.h"
    
    
    int main(void)
    {
     Init();
     while(1)  
      {
        if(keinen taster gedrückt)
        {
         MotorDir(FWD,FWD);
    	 MotorSpeed(150,170);
    	 StatusLED(GREEN);
    	 BackLED(ON,ON);
    	 FrontLED(ON);
        }
        else
        {
          MotorDir(RWD,RWD)
    	  MotorSpeed(150,170)
    
        }
      }
    }
    Ich glaube der Aufbau ist völlig falsch, aber ich kann das noch nicht so beurteilen, ich bin wie gesagt ein totaler Anfänger.

    Also ich weiß noch nicht, welchen Befehl ich brauche für "keinen Taster gedrückt", deshalb steht da noch nichts in der "if-klammer". Das mit den Pausen weiß ich auch gerade nicht, deshalb stehen nach "else" nur die beiden Befehle fürs Rückwärtsfahren.

    Habe ich bereits Fehler in dem Code? Und was muss ich für "keinen Taster gedrückt" einsetzen, und wie lautet der Befehl für eine Pause?

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    12.09.2007
    Alter
    30
    Beiträge
    98
    wenn du die Pause nicht rein machst, fährt der Asuro so lange rückwärts bis die Taster nicht mehr gedrückt sind und fährt dann sofort wieder vorwärts.

    mfg liggi
    Lieber am Asuro rumschrauben als alles andere.
    Meine Homepage

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    16.01.2009
    Ort
    Rosenfeld
    Beiträge
    57
    Zur Abfrage der Taster gibt es die Funktion PollSwitch().
    Diese liefert aber leider nicht immer zuverlässige Werte und sollte daher zur Sicherheit mehrfach hintereinander aufgerufen werden.
    Such hier einfach mal nach "PollSwitch", dann findest du genügend Beispiele für die richtige Verwendung dieser Funktion.

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    07.12.2008
    Beiträge
    31
    Hallo!

    Also ich habe jetzt mithilfe von älteren Beiträgen hier und der Anleitung folgendes Programm geschrieben:

    Code:
    #include "asuro.h"
    
    int main(void)
    {
       Init();
       if (PollSwitch()==0)
       {
          MotorDir(FWD,FWD);
          MotorSpeed(150,170);
          BackLED(ON,ON);
    	  FrontLED(ON);
    	  StatusLED(GREEN);
       }
       else
       {
          MotorDir(FWD,FWD);
          MotorSpeed(0,0);
          StatusLED(RED);
       }
    
       while(1);
       return 0;
    }
    Jedoch macht mein Asuro nicht das was er tun soll
    Also er soll ja solange geradeaus fahren, bis ein Taster akitviert wird. Dann soll er stehen bleiben. Das mit dem Rückwärtsfahren und der 90° Drehung habe ich jetzt noch nicht eingebaut, das kommt dann, wenn dieses Programm funktioniert.

    Also Schreibfehler und sowas sind nicht drin, das Promgramm lies sich ohne irgendwelche Errors konvertieren.

    Was ist an dem Programm falsch?

  8. #8
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    02.01.2008
    Alter
    32
    Beiträge
    239
    hallo
    du must das ganze if- else in eine while(1)-endlosschleife setzen.
    ansonsten wird die abfrage nur einmal durchgeführt und im while(1); das danach folgt bleibt der prozessor "stecken" (dies ist aber so gewollt)

    schau einfach einmal meinen aufbau im früheren post an, dann müsste dir klar sein, was ich meine
    mfg hai1991

    P.S.: wer großbuchstaben oder rechtschreibfehler findet darf sie behalten

  9. #9
    Benutzer Stammmitglied
    Registriert seit
    16.01.2009
    Ort
    Rosenfeld
    Beiträge
    57
    Dein Programm ist schon mal gar nicht übel! Das einzige Problem dabei: die Taster werden nur ein einziges mal abgefragt. Wenn dabei keiner gedrückt ist, fährt der Asuro einfach immer weiter.

    Pack das Ganze in eine Endlosschleife und schon passt es:
    Code:
    #include "asuro.h" 
    
    int main(void) 
    { 
       Init(); 
       while(1) 
       {
         if (PollSwitch()==0) 
         { 
            MotorDir(FWD,FWD); 
            MotorSpeed(150,170); 
            BackLED(ON,ON); 
            FrontLED(ON); 
           StatusLED(GREEN); 
         } 
         else 
         { 
            MotorDir(FWD,FWD); 
            MotorSpeed(0,0); 
            StatusLED(RED); 
         } 
      }
      return 0; 
    }

  10. #10
    Benutzer Stammmitglied
    Registriert seit
    07.12.2008
    Beiträge
    31
    Danke für deine Antwort hai,

    ich habe jetzt dieses Programm geschrieben:

    Code:
    #include "asuro.h"
    
    int main(void)
    {
       Init();
       while(1)
        {  
        if (PollSwitch()==0)
        {
          MotorDir(FWD,FWD);
          MotorSpeed(150,170);
          BackLED(ON,ON);
    	  FrontLED(ON);
    	  StatusLED(GREEN);
        } 
       else
       { 
          MotorDir(FWD,FWD);
          MotorSpeed(0,0);
          StatusLED(RED);
       }
    
       return 0;
    
      }
     }
    while(1) ist nun am Anfang und umschließt if und else.
    Es funktioniert schon etwas besser als das vorherige Programm, allerdings Reagiert der Asuro nun bei einem Gedrückten Kollisionstaster überhaupt nicht, und fährt einfach weiter.

    Wo liegt nun das Problem?

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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

LiFePO4 Speicher Test