Hallo
Ich würde das proportional lösen:
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: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); }
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







Zitieren

Lesezeichen