- 3D-Druck Einstieg und Tipps         
Seite 2 von 4 ErsteErste 1234 LetzteLetzte
Ergebnis 11 bis 20 von 37

Thema: servo mit ir-fernbedieung steuern

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

    Praxistest und DIY Projekte
    dein vorschlag is ja nicht schlecht.... nur kommt halt in übersetzungsfehler wenn ich des auf die art
    if(rc5data.key_code == RC5_KEY_SERVO_LEFT)
    {
    ...
    }
    mache. hast vielleicht noch ne andere idee wie man des machen könnte?

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

    das sprudelt mal wieder vor informationen...


    also, welchen übersetzungsfehler zeigt er an, und dann muss man überlegen, was der heisst, dann kann man oft sogar als programmieranfänger erkennen, was man falsch gemacht hat...


    MfG Pr0gm4n

  3. #13
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    26.01.2008
    Ort
    Allgäu
    Alter
    37
    Beiträge
    220
    Hi,

    das sprudelt mal wieder vor informationen...


    also, welchen übersetzungsfehler zeigt er an, und dann muss man überlegen, was der heisst, dann kann man oft sogar als programmieranfänger erkennen, was man falsch gemacht hat...


    MfG Pr0gm4n

    ne, das hab ich jetzt nicht gewusst^^ wie wärs wenn du anstatt deinen achso tollen kommentaren mal was zum thema schreibst? für des is der thread ja da....

    dass der übersetzungsfehler an der zeile
    if(rc5data.key_code == RC5_KEY_SERVO_LEFT)
    liegt weiß ich ja, vor ich diese zeile geändert hab war er ja noch nicht da......


    p.s. denk mal drüber nach

  4. #14
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    24.01.2008
    Ort
    Zürich
    Beiträge
    604
    Also erstmal an dich proevofreak:

    -verwende bitte die Zitat-tags oder halt auf auswahl quoten, das iss so unübersichtlich

    -dann an dein PS: ich muss da nix nachdenken, das war schon fürs thema

    -du hast den Fehler noch immer nicht gepostet und wie ich

    also, welchen übersetzungsfehler zeigt er an, und dann muss man überlegen, was der heisst

    da geschrieben habe könnte da auch drin stehen, was an der zeile falsch ist...


    bevor du also weiter meckerst lies bitte nächstes mal erstmal alles in ruhe zweimal durch und beleidige mich nicht als schon fast nen Troll


    was ich dir vorher geschrieben habe

    kannst du bitte wenigstens alles lesen?


    Zitat:

    int key=getRC5Data(); //oder wie das auch immer heisst




    das heißt, dass ich nicht weis, wie die Funktion heißt...

    und nachgucken kannst du im Selftest-Programm und in der Anleitung, hab ich

    Zitat:

    von einer Funktion, die die RC5-Daten ausliest, guck doch mal anleitung




    da geschrieben, also lasse bitte solche unsinnigen posts...

    hast du wohl immernoch nicht gemacht, du fragst die ganze zeit nach problemen, die eh in der anleitung stehen


    da du selbst noch nicht geschaut hast mache ich es dir sogar noch einfacher:

    du gehst in der RP6-Anleitung auf ende S.95 bzw. anfang S.96, das liest du dir durch und guckst dir dazu noch das Beispiel 8 TV Remote an und dann kannst du dein Programm abändern...

    du weist dann auch, warum da ein Compilerfehler war...


    ach ja, nur zu deiner Info, hättest du einfach gleich den Compilerfehler gepostet hätten wir dir das gleich sagen können also nur um dir deutlich zu machen, dass deine Aussage

    wie wärs wenn du anstatt deinen achso tollen kommentaren mal was zum thema schreibst?

    nicht für mich, sondern sogar eher für dich gilt...


    Sei lieber nicht so unfreundlich zu Leuten, die so nett sind und dir bei deinen Problemen helfen wollen


    MfG Pr0gm4n

  5. #15
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    26.01.2008
    Ort
    Allgäu
    Alter
    37
    Beiträge
    220
    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');}
    
    void servoTaskRight()
    { if (rc5data.key_code == RC5_KEY_SERVO_RIGHT)
    		{setLEDs(1);             
            sleep(10);        
             setLEDs(0);             
             sleep(200-10);}
    		 }
    		 
    void servoTaskLeft()
    { 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(); 
    servoTaskRight();
    servoTaskLeft();
       }
       return 0;
    }
    
    fehlermeldung: Compiling: Servoansteuerung.c
    avr-gcc -c -mmcu=atmega32 -I. -gdwarf-2   -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=Servoansteuerung.lst -I../../RP6Lib -I../../RP6Lib/RP6base -I../../RP6Lib/RP6common -std=gnu99 -MD -MP -MF .dep/Servoansteuerung.o.d Servoansteuerung.c -o Servoansteuerung.o
    Servoansteuerung.c:27: warning: function declaration isn't a prototype
    Servoansteuerung.c: In function 'servoTaskRight':
    Servoansteuerung.c:27: error: 'rc5data' undeclared (first use in this function)
    Servoansteuerung.c:27: error: (Each undeclared identifier is reported only once
    Servoansteuerung.c:27: error: for each function it appears in.)
    Servoansteuerung.c: At top level:
    Servoansteuerung.c:35: warning: function declaration isn't a prototype
    Servoansteuerung.c: In function 'servoTaskLeft':
    Servoansteuerung.c:35: error: 'rc5data' undeclared (first use in this function)
    Servoansteuerung.c:58:2: warning: no newline at end of file
    make: *** [Servoansteuerung.o] Error 1
    
    > Process Exit Code: 2
    > Time Taken: 00:00
    ich hab jetzt mittlerweile alle rc5 adressbits anstatt dem rc5data.key_code durchprobiert. aber die fehlermeldung kommt nach wie vor....

    gruß

  6. #16
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    Hallo proevofreak,

    ich habe 'mal ein bißchen umgeschrieben, damit das Programm kompiliert werden kann. Die Funktion des Programms selbst habe ich aber NICHT getestet:
    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'); 
    
    if (rc5data.key_code == RC5_KEY_SERVO_RIGHT) 
    	{setLEDs(1); 
    	 sleep(10); 
    	 setLEDs(0); 
    	 sleep(200-10);} 
     
    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; 
    }
    Vielleicht kannst du ja damit weiter machen ...

    Gruß Dirk

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

    also so lobe ich es mir schon mehr...


    der compiler sagt, dass die variable rc5data nicht deklariert ist und das stimmt, ist aber auch anders zu verstehen...

    versuche doch mal den code so zu kompilieren:

    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; 
    }
    denn wenn du dir das nochmal genau überlegst:

    der Eventhandler ruft die Funktion receiveRC5Data auf, dann gibt das Programm zwar im Terminal alles zum RC5-Code aus, der empfangen wurde, aber die Servos werden ja nicht gestellt. wenn du jetzt aber deine Funktionen in der Hauptschleife aufrufst stehen die Variablen, die du auslesen willst nichtmehr zur Verfügung, da es lokale Variablen sind.

    du musst also aus der Funktion raus deine Servos bewegen bzw. so wie ich oben dann über Parameter die Variablen in die Servofunktionen bringen

    dein Compiler gibt dir doch

    'rc5data' undeclared (first use in this function)
    für jede Servofunktion aus, das heisst, er weiss nicht, wo er das rc5data bitte hernehmen soll, also geben wir es ihm einfach über Parameter, soweit verstanden?

    Wenn dich die Ausgaben im Terminal stören kannst du die Funktion receiveRC5Data auch bis auf die Aufrufe der Servofunktionen mit Parametern leeren, bzw. einfach die Inhalte der beiden Servofunktionen in die receiveRC5Data kopieren, z.B. so:

    Code:
    void receiveRC5Data(RC5data_t rc5data) 
    {  if (rc5data.key_code == RC5_KEY_SERVO_RIGHT) 
    {setLEDs(1); 
    sleep(10); 
    setLEDs(0); 
    sleep(200-10);}
    
    if (rc5data.key_code == RC5_KEY_SERVO_LEFT) 
    {setLEDs(1); 
    sleep(20); 
    setLEDs(0); 
    sleep(200-20);} 
    }
    verstanden?

    so kannst du die 3 Funktionen in eine zusammenfassen, und natürlich auch in der gleichen Funktion noch Ausgaben im Terminal machen, wie das mit Device Adresse oder Togglebit etc...



    MfG Pr0gm4n


    EDIT: Ich war wohl zu lange am schreiben, um es ja richtig gut zu erklären, da war DIRK mit der gleichen Lösung wohl schneller

  8. #18
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    26.01.2008
    Ort
    Allgäu
    Alter
    37
    Beiträge
    220
    danke für eure unterstützung.... jetzt geht die steuerung so wie ich sie mir vorgestellt hab.... jetzt kann ich mich auf das verbauen des Servos konzentrieren..... dieses programm wird wohl die grundlage für die ansteuerung der Servos meines projektes sein...

    gruß

  9. #19
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    26.01.2008
    Ort
    Allgäu
    Alter
    37
    Beiträge
    220
    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ß

  10. #20
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    26.01.2008
    Ort
    Allgäu
    Alter
    37
    Beiträge
    220
    so, jetzt hab ich das programm von dirk oben mal versucht so umzuprogrammieren, dass ich den servo auf der experimentierplatine am xbus an der sda leitung anschließen kann. leider reagiert der servo jetzt nicht mehr auf die signale meiner fernbedienung.
    hier mein abgeändertes programm:

    Code:
    // RP6 steuert ein Servo an der SL1-LED mit Sleep()
    
    #include "RP6RobotBaseLib.h" // Denn vollen Funktionsumfang der Lib bezahlen
    
    #define SERVO_OUT			SDA
    
    #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');
    
    
    
    if (rc5data.key_code == RC5_KEY_SERVO_RIGHT)
       {cli();
       PORTC |= SERVO_OUT;				//SDA high
        sleep(10);
        PORTC &= ~SERVO_OUT;
        sleep(200-10);
    	sei();}
     
    if (rc5data.key_code == RC5_KEY_SERVO_LEFT)
       {cli();
       PORTC |= SERVO_OUT;
        sleep(20);
        PORTC &= ~SERVO_OUT;
        sleep(200-20);
    	sei();}
    	
    }
    
    void initSERVO(void)
    {
    	DDRC |= SERVO_OUT;
    	PORTC &= ~SERVO_OUT;
    	
    }
    
    int main(void)
    {
    initRobotBase();
    IRCOMM_setRC5DataReadyHandler(receiveRC5Data);
    powerON();
    initSERVO();
    
    while(true)
    {
    task_RP6System();
    }
    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