- Labornetzteil AliExpress         
Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 21

Thema: fehlfunktion bei code

  1. #11
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    04.01.2008
    Alter
    31
    Beiträge
    540
    Anzeige

    Powerstation Test
    danke, hat sich erledigt! das mit dem uint16_t zahler (void) ist ja ne funktion! ich habe die variablen jetzt nicht definiert, sondert als 16bitvariable angegeben!(uint16_t a). jetzt klappt alles super!

    danke an alle,

    roboman

  2. #12
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    04.01.2008
    Alter
    31
    Beiträge
    540
    sry, doch noch ein fehler:

    jetzt kommt die fehlermeldung:error: expected expression before 'else'

    in den zeilen steht:
    uint16_t behaviour_avoid(void)
    {
    static uint8_t last_obstacle = LEFT;
    static uint8_t obstacle_counter = 0;
    switch(avoid.state)
    {
    case IDLE:
    if(obstacle_right && obstacle_left)
    f++;
    avoid.state = AVOID_OBSTACLE_MIDDLE;
    else if(obstacle_left)
    e++;
    avoid.state = AVOID_OBSTACLE_LEFT;
    else if(obstacle_right)
    avoid.state = AVOID_OBSTACLE_RIGHT;
    d++;

    break;

    bitte um hilfe, was falsch sein könnte!

    roboman

  3. #13
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    04.01.2008
    Alter
    31
    Beiträge
    540
    hat sich schon erledigt

  4. #14
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    04.01.2008
    Alter
    31
    Beiträge
    540
    noch ne frage zu nem anderen code! ich will, dass ein servo sich hin und her bewegt! dazu klemme ich den signaleingang vom servo an eine LED!

    wenn ich den code ausführe, bewegt sich der servo nach rechts(soweit richtig) aber danach immer weiter nach rechts, obwohl er schon längst die maximale position (20) erreicht hat!

    hier der code:

    #include "RP6RobotBaseLib.h"
    uint16_t servopos = 20;


    int main (void)
    {
    initRobotBase();
    while (true)
    {
    task_RP6System();
    servoposi();
    }
    return 0;
    }


    void servotrim(void)
    {
    setLEDs(0b000000);
    sleep(200-servopos);
    setLEDs(0b010000);
    sleep(servopos);
    }

    void servoposi(void)
    {
    if(servopos==10)
    {
    while(servopos != 20)
    {
    servopos++;
    servotrim();
    mSleep(50);
    }
    }
    else if(servopos==20)
    {
    while(servopos != 10)
    {
    servopos--;
    servotrim();
    mSleep(50);
    }
    }
    }

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

    Zufällig hängt mein neuer Greifer auch auf den LEDs, deshalb kann ich es einfach testen. Der Fehler war die vertauschte Logik des Steuersignals:

    Code:
    #include "RP6RobotBaseLib.h"
    uint16_t servopos = 20;
    
    void servotrim(void)
    {
    	setLEDs(1);
    	sleep(servopos);
    	setLEDs(0);
    	sleep(200-servopos);
    }
    
    void servoposi(void)
    {
    	if(servopos==10)
    	{
    		while(servopos != 20)
    		{
    			servopos++;
    			servotrim();
    			mSleep(50);
    		}
    	}
    	else if(servopos==20)
    	{
    		while(servopos != 10)
    		{
    			servopos--;
    			servotrim();
    			mSleep(50);
    		}
    	}
    }
    
    int main (void)
    {
    	initRobotBase();
    	while (true)
    	{
    		task_RP6System();
    		servoposi();
    	}
    	return 0;
    }
    Damit macht mein RP6 das:

    Bild hier  
    http://www.youtube.com/watch?v=44955UWDgyA

    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!

  6. #16
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    04.01.2008
    Alter
    31
    Beiträge
    540
    an sich funktioniert es ja, ich will nur, dass der servo sich langsamer bewegt, aber ohne zu ruckeln

  7. #17
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    04.01.2008
    Alter
    31
    Beiträge
    540
    hab jetzt mSleep vor der inkrementierung eingefügt, funktioniert super!

  8. #18
    Benutzer Stammmitglied
    Registriert seit
    24.01.2009
    Beiträge
    76
    frage habt ihr die Servos einfach mit an die led gelötet oder habt ihr die leds abgebaut?
    lg

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

    Viele Anschlüsse am RP6 sind zusätzlich auf freien Lötaugen verfügbar, so sind die LEDs/Bumpers auch mit IO1-4 bzw. BPL/BPR verbunden. Hier sieht man meine Platine mit eingelöteten Stiftleisten:
    Bild hier  
    (Anklicken für größeres Bild. Mehr Pics und Erklärungen:
    https://www.roboternetz.de/phpBB2/ze...=356247#356247)


    Das funktionierte eigentlich recht gut, allerdings habe ich inzwischen meinen USRBUS mit den LEDs belegt. Das ist langfristig wohl die bessere Lösung:
    Code:
    SL1   1 - 2   GND
    SL2   3 - 4   Vcc
    SL3   5 - 6   ADC0
    SL4   7 - 8   ADC7
    SL5   9 - 10   ADC1
    SL6   10- 12   Vcc
    frei   13- 14   GND
    (Aus: https://www.roboternetz.de/phpBB2/ze...=439019#439019)

    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!

  10. #20
    Benutzer Stammmitglied
    Registriert seit
    24.01.2009
    Beiträge
    76

    Sry für die frage

    Hallo,
    sry ich wollte nicht extra ein neues forum aufmachen.
    mein prob is ich will 2 Servos gleihzeitig ansteuern und habs so gemacht:
    Code:
    #include "RP6RobotBaseLib.h"
    
     
    uint16_t servopos = 20; 
    uint16_t servopos2 = 20; 
    
    void servotrim(void) 
    { 
    setLEDs(0b001000);
    
       sleep(servopos); 
       setLEDs(0); 
       sleep(200-servopos); 
       mSleep(50); 
    } 
    
    void servoposi(void) 
    { 
       if(servopos==8) 
       { 
          while(servopos != 20) 
          { 
             servopos++; 
             servotrim(); 
             mSleep(50); 
          } 
       } 
       else if(servopos==20) 
       { 
          while(servopos != 8) 
          { 
             servopos--; 
             servotrim(); 
             mSleep(50); 
          } 
       } 
    } 
    
    
    //***********************SERVO2*******************************************************+
    void servotrim2(void) 
    { 
    setLEDs(1);
    
       sleep(servopos2); 
       setLEDs(0); 
       sleep(200-servopos2); 
       mSleep(50); 
    } 
    
    void servoposi2(void) 
    { 
       if(servopos==8) 
       { 
          while(servopos2 != 20) 
          { 
             servopos2++; 
             servotrim(); 
             mSleep(50); 
          } 
       } 
       else if(servopos2==20) 
       { 
          while(servopos2 != 8) 
          { 
             servopos2--; 
             servotrim2(); 
             mSleep(50); 
          } 
       } 
    } 
    
    int main (void) 
    { 
       initRobotBase(); 
       powerON(); 
    
       while (true) 
       { 
          task_RP6System(); 
          servoposi(); 
    	  servoposi2(); 
       } 
       return 0; 
    }
    aber ich kann sie nicht gleichzeitig ansteuern wie kann ich es ansters machen? oder geht das mit disen code nicht?

Seite 2 von 3 ErsteErste 123 LetzteLetzte

Berechtigungen

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

Solar Speicher und Akkus Tests