- fchao-Sinus-Wechselrichter AliExpress         
Seite 3 von 4 ErsteErste 1234 LetzteLetzte
Ergebnis 21 bis 30 von 37

Thema: servo mit ir-fernbedieung steuern

  1. #21
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    26.01.2008
    Ort
    Allgäu
    Alter
    37
    Beiträge
    220
    Anzeige

    Praxistest und DIY Projekte
    hat sich erledigt... hab meinen fehler gefunden... die cli(); und sei(); anweisungen müssen raus... jetzt funktionierts einwandfrei...

  2. #22
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    62
    Beiträge
    5.799
    Blog-Einträge
    8
    Code:
    {cli(); 
    PORTC |= SERVO_OUT; //SDA high 
    sleep(10); 
    PORTC &= ~SERVO_OUT; 
    sleep(200-10); 
    sei();}
    Genau darüber hatten wir vor ein paar Tagen gesprochen. *lol*
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  3. #23
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    26.01.2008
    Ort
    Allgäu
    Alter
    37
    Beiträge
    220
    ja stimmt schon.... aber was bedeutet eigentlich cli(); und sei();?

    gruß

  4. #24
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    62
    Beiträge
    5.799
    Blog-Einträge
    8
    was bedeutet eigentlich cli(); und sei();?
    http://www.mikrocontroller.net/artic...r_.28WinAVR.29
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  5. #25
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    26.01.2008
    Ort
    Allgäu
    Alter
    37
    Beiträge
    220
    Zitat Zitat von proevofreak
    kann mir vielleicht noch jemand sagen warum der servo im folgenden programm flüssiger dreht, als in dem von dirk? liegt das an der ansteuerung mit der fernbedienung?

    Code:
    // RP6 steuert ein Servo an der SL1-LED mit Sleep()                 
    
    #include "RP6RobotBaseLib.h"      // Denn vollen Funktionsumfang der Lib bezahlen
                                     // wir mit den störenden Interrupts
    
    uint8_t stellzeit, servopos=10;    
    int main(void)
    {
       initRobotBase();
       setLEDs(0);   
    startStopwatch1();                
       while(true)
       {
                      
          while(getStopwatch1()<2000)       
          {                          
             setLEDs(1);             
             sleep(10);        
             setLEDs(0);             
             sleep(200-10);}
    		while(getStopwatch1()>2000)
    		{setLEDs(1);
    		sleep(20);
    		setLEDs(0);
    		sleep(200-20);
          }                          
          
       }
       return(0);
    }
    gruß
    danke... aber die frage hast du mir immer noch nicht beantwortet....

    gruß

  6. #26
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    62
    Beiträge
    5.799
    Blog-Einträge
    8
    Hallo

    aber die frage hast du mir immer noch nicht beantwortet
    Wenn du Dirks Version vom 6.5. meinst (Link):
    Code:
    if (rc5data.key_code == RC5_KEY_SERVO_RIGHT) 
       {setLEDs(1); 
        sleep(10); 
        setLEDs(0); 
        sleep(200-10);}
    Nur wenn das richtige IR-Zeichen eingelesen und erkannt wurde, wird ein einziger Impuls gesendet, ansonsten ist Impulspause. Anders ist es hier:
    Code:
          while(getStopwatch1()<2000)        
          {                          
             setLEDs(1);              
             sleep(10);        
             setLEDs(0);              
             sleep(200-10);}
    Es wird zwei Sekunden lang das zur gewünschten Position gehörende Impuls/Pause-Signal gesendet. Das Servo hat reichlich Zeit die neue Position zu erreichen. Das war nun hoffentlich die erwartete Anwort:)

    Gruß

    mic
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  7. #27
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    26.01.2008
    Ort
    Allgäu
    Alter
    37
    Beiträge
    220
    ja das hab ich gemeint. kann man dann den 2. code von dir jetzt so umschreiben, dass man den servo mit ir steuern kann? im 2. code von dir is des ganze bisher ja zeitgesteuert....

    gruß

  8. #28
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    24.01.2008
    Ort
    Zürich
    Beiträge
    604
    Hi proevofreak,

    ich wollte zu

    kann man dann den 2. code von dir jetzt so umschreiben, dass man den servo mit ir steuern kann?
    unbedingt was sagen:

    WARUM SOLLTE ES NICHT GEHEN BZW. WARUM NIMMST DU NICHT DEN 2. CODE HER???

    das ist doch exakt das gleiche.....



    MfG Pr0gm4n

  9. #29
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    26.01.2008
    Ort
    Allgäu
    Alter
    37
    Beiträge
    220
    @Pr0gm4n:
    hab ich schon ausprobiert den 2. code zu nehmen und auf ir steuerung abzuändern. ergibt dann folgendes programm:

    Code:
    // RP6 steuert ein Servo an der SL1-LED mit Sleep()                 
    
    #include "RP6RobotBaseLib.h"      // Denn vollen Funktionsumfang der Lib bezahlen
                                     // wir mit den störenden Interrupts
    #define RC_PROMO8
    
    #ifdef RC_PROMO8
    
    #define RC5_KEY_SERVO_RIGHT 46
    #define RC5_KEY_SERVO_LEFT 60
    
    #endif
    uint8_t stellzeit, servopos=10;   
    void receiveRC5Data(RC5data_t rc5data)
    {
    writeString_P("Toggle Bit:");
    writeChar(rc5data.toggle_bit + '0');
    writeString_P(" | Device Address:");
    writeInteger(rc5data.device, DEC);
    writeString_P(" | Key Code:");
    writeInteger(rc5data.key_code, DEC);
    writeChar('\n');
    } 
    int main(void)
    {
       initRobotBase();
       setLEDs(0);  
    IRCOMM_setRC5DataReadyHandler(receiveRC5Data);
    powerON(); 
                  
       while(true)
       {
                      
          while(rc5data.key_code == RC5_KEY_SERVO_RIGHT)       
          {                          
             setLEDs(1);             
             sleep(10);        
             setLEDs(0);             
             sleep(200-10);}
    		while(getStopwatch1()>2000)
    		{setLEDs(1);
    		sleep(20);
    		setLEDs(0);
    		sleep(200-20);
          }                          
          task_RP6System();
       }
       return(0);
    }
    dieses programm bringt aber beim kompilieren folgende fehlermeldung:

    Code:
    Compiling: ServoLinksRechts.c
    avr-gcc -c -mmcu=atmega32 -I. -gdwarf-2   -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=ServoLinksRechts.lst -I../../RP6Lib -I../../RP6Lib/RP6base -I../../RP6Lib/RP6common -std=gnu99 -MD -MP -MF .dep/ServoLinksRechts.o.d ServoLinksRechts.c -o ServoLinksRechts.o
    ServoLinksRechts.c: In function 'main':
    ServoLinksRechts.c:34: error: 'rc5data' undeclared (first use in this function)
    ServoLinksRechts.c:34: error: (Each undeclared identifier is reported only once
    ServoLinksRechts.c:34: error: for each function it appears in.)
    ServoLinksRechts.c:50:2: warning: no newline at end of file
    make: *** [ServoLinksRechts.o] Error 1
    
    > Process Exit Code: 2
    > Time Taken: 00:02
    gruß

  10. #30
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    24.01.2008
    Ort
    Zürich
    Beiträge
    604
    Hi,

    der 2. Code ist schon auf IR-Steuerung...

    du musst nichts abändern, das ist schon fertig gewesen, also mein Vorschlag da...


    nimm einfach mal den von mir oben geposteten Code

    Code:
    // RP6 steuert ein Servo an der SL1-LED mit Sleep() 
    
    #include "RP6RobotBaseLib.h" // Denn vollen Funktionsumfang der Lib bezahlen 
    
    #define RC_PROMO8 
    
    #ifdef RC_PROMO8 
    
    #define RC5_KEY_SERVO_RIGHT 46 
    #define RC5_KEY_SERVO_LEFT 60 
    
    #endif 
    
    void receiveRC5Data(RC5data_t rc5data) 
    { 
    writeString_P("Toggle Bit:"); 
    writeChar(rc5data.toggle_bit + '0'); 
    writeString_P(" | Device Address:"); 
    writeInteger(rc5data.device, DEC); 
    writeString_P(" | Key Code:"); 
    writeInteger(rc5data.key_code, DEC); 
    writeChar('\n'); 
    servoTaskRight(); 
    servoTaskLeft();} 
    
    void servoTaskRight(RC5data_t rc5data) 
    { if (rc5data.key_code == RC5_KEY_SERVO_RIGHT) 
    {setLEDs(1); 
    sleep(10); 
    setLEDs(0); 
    sleep(200-10);} 
    } 
    
    void servoTaskLeft(RC5data_t rc5data) 
    { if (rc5data.key_code == RC5_KEY_SERVO_LEFT) 
    {setLEDs(1); 
    sleep(20); 
    setLEDs(0); 
    sleep(200-20);} 
    } 
    
    
    int main(void) 
    { 
    initRobotBase(); 
    IRCOMM_setRC5DataReadyHandler(receiveRC5Data); 
    powerON(); 
    setLEDs(0); 
    
    while(true) 
    { 
    task_RP6System(); 
    } 
    return 0; 
    }
    genau den, den hab ich auch oben schon gepostet, das meinte ich mit 2. Code


    es fehlt nur noch, dass du den Servos Zeit gibst, um sich neu zu stellen, ist aber ganz einfach mit while-Schleife zu lösen:
    Code:
    void servoTaskRight(...){
    if(...){
    while(stellzeit){
    stellzeit--;
    ...
    }
    }
    }
    dann müsste alles passen...


    MfG Pr0gm4n

Seite 3 von 4 ErsteErste 1234 LetzteLetzte

Berechtigungen

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

12V Akku bauen