- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 6 von 6

Thema: [gelöst]Bedingung schreiben?

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    24.01.2009
    Beiträge
    76

    [gelöst]Bedingung schreiben?

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo,
    ich steuere grade einen joystick mit hilfe von den adc eingangen an.
    jetzt will ich den rp6 damit steuern. also links recht vorwärts
    und rückwärts. ich habe vorwärts so gemacht das wenn der mess wert von adc1 >als 600 ist fahre vorwärts das klapt ganz gut aber jetzt will ich aber die geschwindig keit regeln können aber ich weiß nicht wie ich eine bedingung schreibe die zwichen zwi werten liegt z.b 500 bis 600 mache ...... und 601 bis 650 mache ..........
    könnt ihr mir helfen?
    hoffe ich verseht meine frage
    LG

  2. #2
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.220
    Es kommt darauf an wie du die Geschwindigkeit regelst, machst du das mit PWM? Dann kannst du den ADC-Wert umgerechnet ins OCR-Register schreiben.
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    24.01.2009
    Beiträge
    76
    naja mein code geht so:
    Code:
    if (adc2 <= 10) { 
        //hier muss dann halt das hin was er tuhen soll wenn die bedingung eintrift.
       }
    so hier ist der vergleich ob adc2 kleiner als 10 ist ich brauche es aber
    größer als 5 und kleiner als 10

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    ich brauche es aber größer als 5 und kleiner als 10
    if ((adc2 > 5) && (adc2 < 10)) { ... }

    Gruß Dirk

  5. #5
    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

    Ich würde das proportional lösen:
    Code:
    // Steuerung mit Joystick (proportional, vor/zurück)                 22.7.09 mic
    
    // Der eingelesen Joystickwert wird auf maximal 210 umgerechnet.
    // Um einen Überlauf zu verhindern wird zuerst mit 105 gerechnet
    // und das Ergebniss später verdoppelt.
    
    // (Maximaler Ausschlag pro Richtung ist 512, das ergibt 512*105=53760
    // und passt so in eine 16Bit-Variable)
    
    #include "RP6RobotBaseLib.h"
    
    #define joy_x_min 0
    #define joy_x_max 1023
    #define joy_x_mid 511
    #define joy_y_min 0
    #define joy_y_max 1023
    #define joy_y_mid 511
    
    uint8_t speed_l, speed_r;
    uint16_t joy_x, joy_y;
    
    int main (void)
    {
       initRobotBase();
       powerON();
    
       while(1)
       {
          joy_x=readADC(0);
          joy_y=readADC(1);
    
    writeInteger(joy_x, 10);
    writeChar(':');
    writeInteger(joy_y, 10);
    writeChar(' ');
    
          if(joy_x > joy_x_mid)
    		{ // vorwärts
    writeChar('F');
    		   setMotorDir(FWD,FWD);
          	speed_l=speed_r=(joy_x-joy_x_mid)*105/(joy_x_max-joy_x_mid);
    		}
    		else
    		{ // rückwärts
    writeChar('B');
    		   setMotorDir(BWD,BWD);
          	speed_l=speed_r=(joy_x_mid-joy_x)*105/(joy_x_mid-joy_x_min);
    		}
    
    writeInteger(speed_l*2, 10);
    writeChar('\n');
    
          //moveAtSpeed(speed_l*2,speed_r*2);
      		//task_motionControl();
      		mSleep(200);
       }
       return(0);
    }
    Blöderweise kann ich es nicht testen weil ich erst meine Encoder einstellen muss *knirsch* Wenn das erledigt ist kommt noch das Mischen der Richtung dazu. Das hatte ich schon mal mit einer RC-Anlage gelöst:

    Bild hier  
    http://www.youtube.com/watch?v=A_GYUeFAgY8
    (Aus https://www.roboternetz.de/phpBB2/ze...=328824#328824)

    Zur Lösung der eigentlichen Threadfrage: Teile die ADC-Werte ganzzahlig z.b durch 100, dann erhälst du nur einstellige Ergebnisse (0-5). 5 würde dann den Bereich 500-599 abdecken. Oder du teilst durch 50, dann ist z.B. if(x==10)... der Bereich von 500-549, if(x==9)... wäre 450-499 usw.

    Gruß

    mic

    [Edit]Ohne Encoderauswertung funktioniert es zufriedenstellend:
    Bild hier  
    http://www.youtube.com/watch?v=orBghV1S_L4
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    24.01.2009
    Beiträge
    76
    cool Danke euch

Berechtigungen

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

Solar Speicher und Akkus Tests