- Labornetzteil AliExpress         
Seite 2 von 4 ErsteErste 1234 LetzteLetzte
Ergebnis 11 bis 20 von 33

Thema: Ultraschallcode erweitert

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

    Praxistest und DIY Projekte
    Nur keine falsche Bescheidenheit, wenn ich so das Forum durchsuche, finde ich oft hilfreiche Threats von "inka"

    Ich habe das gefunden:
    Code:
    //
    // uint8_t zufall()
    //
    // Liefert eine 8Bit Pseudozufallszahl zurück, 
    // die Zahlenfolge wiederholt sich spätestens nach 65535 Aufrufen
    //
    
    uint8_t zufall()
    {
            static uint16_t startwert=0x0AA;
    
            uint16_t temp;
            uint8_t n;
                    
            for(n=1;n<8;n++)
            {
                    temp = startwert;
                    startwert=startwert << 1;
            
                    temp ^= startwert;
                    if ( ( temp & 0x4000 ) == 0x4000 ) 
                    { 
                            startwert |= 1;
                    }
            }
            
            return (startwert);
    }
    Muss ich mir jetzt eine "zufall.c" und eine "zufall.h" machen , damit ich das einbauen kann?

  2. #12
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    77
    Beiträge
    2.180
    ich würde es zunächstmal versuchen als funktion in deine datei, da wo du es brauchst aufzunehmen:

    uint8_t zufall();
    -----------------------
    und weiter unten die funktion beschreiben:
    -------------------
    void uint8_t zufall(void)
    {
    static uint16_t startwert=0x0AA;
    uint16_t temp;
    uint8_t n;
    for(n=1;n<8;n++)
    {
    temp = startwert;
    startwert=startwert << 1;
    temp ^= startwert;
    if ( ( temp & 0x4000 ) == 0x4000 )
    {
    startwert |= 1;
    }
    }
    return (startwert);
    }
    ---------------

    hoffe dass es so stimmt
    gruß inka

  3. #13
    Erfahrener Benutzer Roboter Genie Avatar von pinsel120866
    Registriert seit
    18.12.2007
    Ort
    Hohenems
    Alter
    58
    Beiträge
    847
    Irgendwie wird mir die Sache zu kompliziert, ich frage mich ob ich mir da nicht zu viel vorgenommen habe...

    Trotzdem DANKE für deine Hilfe!

  4. #14
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    29.11.2006
    Ort
    Geislingen a. d. Steige
    Alter
    33
    Beiträge
    344
    hi pinsel,
    ich habe das bei meinem robby so gemacht das ich aus einem timer register(OCRx) den wert ausgelsen habe und überprüft ob die zahl gerade oder ungerade ist. Da der zeitpunkt an dem dein asuro ein hinderniss erkennt nicht immer gleich ist ensteht so eine einfache ufalls funktion.

    MfG Martin

  5. #15
    Erfahrener Benutzer Roboter Genie Avatar von pinsel120866
    Registriert seit
    18.12.2007
    Ort
    Hohenems
    Alter
    58
    Beiträge
    847
    Hallo Martin,

    hört sich gut an, kannst du mir weitere Infos dazu geben?

  6. #16
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    29.11.2006
    Ort
    Geislingen a. d. Steige
    Alter
    33
    Beiträge
    344
    Code:
    unsigned char ocr = 0;
    unsigned char ocr1 = 0;
    ocr = OCR0;
    ocr1 =ocr/2;
    ocr1 *=2;
    if(ocr == ocr1){
           //rechts
          }
          else{
                 //links
                }

  7. #17
    Erfahrener Benutzer Roboter Genie Avatar von pinsel120866
    Registriert seit
    18.12.2007
    Ort
    Hohenems
    Alter
    58
    Beiträge
    847
    OK, ich habs mal eingefügt, es kommt aber eine Fehlermeldung:

    test.c:18: error: 'OCR0' undeclared (first use in this function)

  8. #18
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    29.11.2006
    Ort
    Geislingen a. d. Steige
    Alter
    33
    Beiträge
    344
    oh hab da das register verwechselt es muss heisen
    Code:
    TCNT0

  9. #19
    Erfahrener Benutzer Roboter Genie Avatar von pinsel120866
    Registriert seit
    18.12.2007
    Ort
    Hohenems
    Alter
    58
    Beiträge
    847
    Jetzt hat's geklappt.

    Nur weicht er bei Abstand<15 immer noch auf die gleiche Seite aus.
    Hier der Code:
    Code:
    #include "asuro.h" 
    #include "ultrasonic.h"
    
    int main(void) 
    { 
    int abstand, sw, sw0, sw1, sw2;
    unsigned char ocr = 0; 
    unsigned char ocr1 = 0;
    
    Init(); 
    
      while(1) 
     { 
    
    sw0=PollSwitch();
    sw1=PollSwitch(); 
    sw2=PollSwitch();
    ocr = TCNT0; 
    ocr1 =ocr/2; 
    ocr1 *=2; 
        
    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(FWD,RWD); 
       MotorSpeed(150, 150); 
       Msleep(600); 
       } 
    if (sw==16) 
       { 
       StatusLED(RED); 
        
       MotorDir(RWD,RWD); 
       MotorSpeed(150, 150); 
       Msleep(600); 
    
       MotorDir(FWD,RWD); 
       MotorSpeed(150, 150); 
       Msleep(600); 
       } 
    if (sw==8) 
       { 
       StatusLED(RED); 
        
       MotorDir(RWD,RWD); 
       MotorSpeed(150, 150); 
       Msleep(600); 
    
       MotorDir(FWD,RWD); 
       MotorSpeed(150, 150); 
       Msleep(600); 
       } 
    if (sw==1) 
       { 
       StatusLED(RED); 
        
       MotorDir(RWD,RWD); 
       MotorSpeed(150, 150); 
       Msleep(600); 
    
       MotorDir(RWD,FWD); 
       MotorSpeed(150, 150); 
       Msleep(600); 
       } 
    if (sw==2) 
       { 
       StatusLED(RED); 
        
       MotorDir(RWD,RWD); 
       MotorSpeed(150, 150); 
       Msleep(600); 
    
       MotorDir(RWD,FWD); 
       MotorSpeed(150, 150); 
       Msleep(600); 
       } 
    if (sw==4) 
       { 
       StatusLED(RED); 
        
       MotorDir(RWD,RWD); 
       MotorSpeed(150, 150); 
       Msleep(600); 
    
       MotorDir(RWD,FWD); 
       MotorSpeed(150, 150); 
       Msleep(600); 
       } 
    
    else if (abstand<15) 
       {
    	   if (ocr == ocr1){ 
    	   StatusLED(RED); 
    
    	   MotorDir(RWD,RWD); 
    	   MotorSpeed(150, 150); 
    	   Msleep(600); 
    
    	   MotorDir(RWD,FWD); 
    	   MotorSpeed(150, 150); 
    	   Msleep(600);
    	   }
    	   else
    	    { 
    	   StatusLED(RED); 
    
    	   MotorDir(RWD,RWD); 
    	   MotorSpeed(150, 150); 
    	   Msleep(600); 
    
    	   MotorDir(FWD,RWD); 
    	   MotorSpeed(150, 150); 
    	   Msleep(600);
    	   }
       } 
    
    else 
       { 
         StatusLED(GREEN); 
         MotorDir(FWD, FWD); 
         MotorSpeed(150, 150); 
        } 
     } 
      return 0; 
    }

  10. #20
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    29.11.2006
    Ort
    Geislingen a. d. Steige
    Alter
    33
    Beiträge
    344
    das sollte so aussehen:
    Code:
    #include "asuro.h"
    #include "ultrasonic.h"
      
    int main(void)
    {
    int abstand, sw, sw0, sw1, sw2;
    unsigned char ocr = 0;
    unsigned char ocr1 = 0;
    
    Init();
    
      while(1)
     {
    
    sw0=PollSwitch();
    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(FWD,RWD);
       MotorSpeed(150, 150);
       Msleep(600);
       }
    if (sw==16)
       {
       StatusLED(RED);
       
       MotorDir(RWD,RWD);
       MotorSpeed(150, 150);
       Msleep(600);
    
       MotorDir(FWD,RWD);
       MotorSpeed(150, 150);
       Msleep(600);
       }
    if (sw==8)
       {
       StatusLED(RED);
       
       MotorDir(RWD,RWD);
       MotorSpeed(150, 150);
       Msleep(600);
    
       MotorDir(FWD,RWD);
       MotorSpeed(150, 150);
       Msleep(600);
       }
    if (sw==1)
       {
       StatusLED(RED);
       
       MotorDir(RWD,RWD);
       MotorSpeed(150, 150);
       Msleep(600);
    
       MotorDir(RWD,FWD);
       MotorSpeed(150, 150);
       Msleep(600);
       }
    if (sw==2)
       {
       StatusLED(RED);
       
       MotorDir(RWD,RWD);
       MotorSpeed(150, 150);
       Msleep(600);
    
       MotorDir(RWD,FWD);
       MotorSpeed(150, 150);
       Msleep(600);
       }
    if (sw==4)
       {
       StatusLED(RED);
       
       MotorDir(RWD,RWD);
       MotorSpeed(150, 150);
       Msleep(600);
    
       MotorDir(RWD,FWD);
       MotorSpeed(150, 150);
       Msleep(600);
       }
    
    else if (abstand<15)
       {
          ocr = TCNT0;
          ocr1 =ocr/2;
          ocr1 *=2;
          if (ocr == ocr1){
          StatusLED(RED);
    
          MotorDir(RWD,RWD);
          MotorSpeed(150, 150);
          Msleep(600);
    
          MotorDir(RWD,FWD);
          MotorSpeed(150, 150);
          Msleep(600);
          }
          else
           {
          StatusLED(RED);
    
          MotorDir(RWD,RWD);
          MotorSpeed(150, 150);
          Msleep(600);
    
          MotorDir(FWD,RWD);
          MotorSpeed(150, 150);
          Msleep(600);
          }
       }
    
    else
       {
         StatusLED(GREEN);
         MotorDir(FWD, FWD);
         MotorSpeed(150, 150);
        }
     }
      return 0;
    }

Seite 2 von 4 ErsteErste 1234 LetzteLetzte

Berechtigungen

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

Solar Speicher und Akkus Tests