-         

Seite 1 von 4 123 ... LetzteLetzte
Ergebnis 1 bis 10 von 33

Thema: Ultraschallcode erweitert

  1. #1
    Erfahrener Benutzer Roboter Genie Avatar von pinsel120866
    Registriert seit
    18.12.2007
    Ort
    Hohenems
    Alter
    51
    Beiträge
    847

    Ultraschallcode erweitert

    Anzeige

    Hallo Zusammen,

    da mein Asuro, wenn er zu schräg auf ein Hindernis zufährt, anstossen kann, habe ich versucht den US-Code um eine Art "Taster-Kollisions-Schutz" zu erweitern:

    Code:
    #include "asuro.h"
    #include "ultrasonic.h"
    #include "myasuro.h" 
    #define MAXDIFF 80
    
    int main(void) 
    { 
      int abstand, abstand_alt, diff; 
      Init(); 
      abstand = Chirp(); 
        
      while(TRUE) 
      { 
       unsigned char i; 
       unsigned char taste=0; 
       abstand_alt = abstand; 
       abstand = Chirp();   
       diff = abstand - abstand_alt; 
       for(i=0;i<10;i++) 
    	{ 
    	PollSwitch(); 
    	} 
    	taste=PollSwitch();     
    
       if( (abstand>15) && (abs(diff)<MAXDIFF) && (taste==0)) 
       { 
         StatusLED(GREEN); 
         MotorDir(FWD, FWD); 
         MotorSpeed(150, 150); 
    	 	for(i=0;i<10;i++) 
    		{ 
    		PollSwitch(); 
    		} 
       } 
       else 
       { 
         StatusLED(RED); 
         MotorDir(RWD, RWD); 
         MotorSpeed(100, 200); 
         Msleep(300); 
       } 
      } 
      return 0; 
    }
    Jetzt aber eine Frage: Wie kann ich einen Zufallsgenerator einbauen, dass der ASURO nicht immer auf die gleiche Seite ausweicht?

  2. #2
    Erfahrener Benutzer Roboter Genie Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    70
    Beiträge
    1.344
    es macht ja nur dann einen sinn, wenn der asuro immer weg von der wand dreht, oder? Versuche doch die taster einzeln abzufragen, sodass er wenn er links anstösst nach rechts wegdreht und umgekehrt...
    gruß inka

  3. #3
    Erfahrener Benutzer Roboter Genie Avatar von pinsel120866
    Registriert seit
    18.12.2007
    Ort
    Hohenems
    Alter
    51
    Beiträge
    847
    Da hast du recht, wenn aber vom US ein Hindernis erkannt wird, geht's dann nicht. Ich meine dass sich der ASURO dann "natürlicher" verhält.

  4. #4
    Erfahrener Benutzer Roboter Genie Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    70
    Beiträge
    1.344
    verstehe ich nicht...
    wenn also die abfrage <10cm positiv beantwortet wird funktioniert die abfrage der taster nicht?
    gruß inka

  5. #5
    Erfahrener Benutzer Roboter Genie Avatar von pinsel120866
    Registriert seit
    18.12.2007
    Ort
    Hohenems
    Alter
    51
    Beiträge
    847
    Bei meinem Programm dreht der Asuro weg, wenn der Abstand kleiner 15 cm wird, bzw. wenn ein Taster betätigt wird. Allerdings dreht er dann immer in die gleiche Richtung.

  6. #6
    Erfahrener Benutzer Roboter Genie Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    70
    Beiträge
    1.344
    meinst du sowas?
    Code:
    #include "asuro.h"
    #include "ultrasonic.h"
    #include "inka.h"
    
    
    int main(void)
    {
    int abstand, sw, sw0, sw1, sw2;
    Init();
    WaitforStart();
    //  abstand = Chirp();
    
      while(1)
     {
    
    sw0=PollSwitch(); // Schalter einlesen und für eine Runde speichern
    sw1=PollSwitch();
    sw2=PollSwitch();
    if ((sw0==sw1) && (sw0==sw2)) sw=sw0; else sw=0;
    
    
    MotorDir(FWD,FWD);
    MotorSpeed(150, 150);
    
    abstand = Chirp();
    StatusLED(YELLOW);
    
    if (sw==32)
       {
       StatusLED(RED);
       
       MotorDir(RWD,RWD);
       MotorSpeed(150, 150);
       Msleep(600);
    
       MotorDir(RWD,FWD);
       MotorSpeed(150, 150);
       Msleep(900);
       }
    if (sw==1)
       {
       StatusLED(RED);
       
       MotorDir(RWD,RWD);
       MotorSpeed(150, 150);
       Msleep(600);
    
       MotorDir(FWD,RWD);
       MotorSpeed(150, 150);
       Msleep(900);
       }
    
    else if(abstand<15)
       {
       StatusLED(RED);
    
       MotorDir(RWD,RWD);
       MotorSpeed(150, 150);
       Msleep(600);
    
       MotorDir(RWD,FWD);
       MotorSpeed(150, 150);
       Msleep(900);
       }
    
    else 
       {
         StatusLED(GREEN);
         MotorDir(FWD, FWD);
         MotorSpeed(250, 250);
        }
     }
      return 0;
    }
    gruß inka

  7. #7
    Erfahrener Benutzer Roboter Genie Avatar von pinsel120866
    Registriert seit
    18.12.2007
    Ort
    Hohenems
    Alter
    51
    Beiträge
    847
    Ja, genau das. DANKE!
    Wofür braucht man "WaitForStart()"?

  8. #8
    Erfahrener Benutzer Roboter Genie Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    70
    Beiträge
    1.344
    damit er wartet, bis er mit einem tastendruck "losgeschickt" wird und nicht sofort nach dem einschalten losrast...
    ist einen ähnliche tastenabfrage wie oben, als funktion in "inka.c" und h abgelegt...
    gruß inka

  9. #9
    Erfahrener Benutzer Roboter Genie Avatar von pinsel120866
    Registriert seit
    18.12.2007
    Ort
    Hohenems
    Alter
    51
    Beiträge
    847
    Gut, danke dass du einer "Programmierpflaume" wie mir etwas unter die Arme greifst. Das willkürliche Wegdrehen (rechts ODER links) bei Abstand<15 habe ich leider noch nicht m Griff...

  10. #10
    Erfahrener Benutzer Roboter Genie Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    70
    Beiträge
    1.344
    das ist ein problem der hinderniserfassung, man hat halt nur einen sender und einen empfänger, nicht sechs taster - daher schwierig.
    Und was das "unter die arme greifen" betrifft, ich bin eigentlich eine nicht wesentlich bessere "pflaume", aber du kennst sicher die story mit den blinden hünhnern"?
    im forum gibt es einen "zufallsgenerator", ich glaube von M.1.R, Suche mal danach...
    gruß inka

Seite 1 von 4 123 ... LetzteLetzte

Berechtigungen

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