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
Lesezeichen