ps2 controled arduino uno servo probleem (gaat terug naar beginstand).

Hallo allemaal, ik ben nieuw hier (ook in heel het arduino gebeuren)

Ik ben samen met mijn 8 jarige zoon een MeArm in elkaar aan het knutselen (hardware is simpel) maar kom er softwarematig niet uit. Het robotje werkt na veel gezoek op het internet maar ik krijg een ding niet opgelost. Op het moment dat we de joysticks van de ps2 controller loslaten schieten de servo's meteen terug naar de beginstand. Nu kan ik gelukkig nog wel een beetje motorisch multitasken maar mijn zoontje krijgt het niet voor elkaar om iets op te pakken en daarna vast te houden met de MeArm. wat moet ik veranderen om te zorgen dat zodra de joystick losgelaten wordt de robot die positie vasthoudt. Ook zou het mooi zijn als de servo's niet zo snel zouden zijn. is dit ook aan te passen? hierbij de code die in nu heb.

#include  //for v1.6
#include 
PS2X ps2x; // create PS2 Controller Class
Servo LYservo;
Servo RXservo;
Servo RYservo;
Servo LXservo;
int error = 0;
byte type = 0;
byte vibrate = 0;
void setup(){
LYservo.attach(9);
RXservo.attach(6);
RYservo.attach(3);
LXservo.attach(5);
error = ps2x.config_gamepad(13,11,10,12, true, false); //setup pins and settings: GamePad(clock,command, attention, data, Pressures?,Rumble?) check for error
type = ps2x.readType();
Serial.begin(57600);
}
void loop(){
if(error == 1) //skip loop if no controller found
 { 
   Serial.println("No Controller Found,check wiring");
   return;
 }
ps2x.read_gamepad(); //read controller
RXservo.write(map(ps2x.Analog(PSS_RX), 0, 255, 0, 179));
RYservo.write(map(ps2x.Analog(PSS_RY), 0, 255, 0, 179));
LXservo.write(map(ps2x.Analog(PSS_LX), 0, 255, 0, 179)); 
LYservo.write(map(ps2x.Analog(PSS_LY), 0, 255, 0, 179));
delay(50);
}

haal de signalen die je van de joystick krijgt eens uit elkaar en kijk dan wat je eigenlijk krijgt. (heb geen joystick dus kan het niet proberen. Krijg je al je de joystick loslaat inderdaad 128 terug of misschien wel 0 en moet je de map anders zetten. maak er tussenvariabelen van dan kun je die manipuleren.

zoals ik al eerder zei... ik ben compleet nieuw in de wereld van arduino.

Ik zie niet waar jij die 128 vandaan haalt :confused:

Dat is het jammere van code die ergens vandaan getrokken word, maar dan net niet helemaal blijkt te voldoen aan de verwachtingen.

Jouw code doet een map van 0 tot 255 naar 0 tot 179 per joystick as. Aangezien jij zegt dat de joysticks terugveren naar het mechanische midden, zou je moeten kunnen aannemen dat de ingelezen waarde die bij dat midden hoort, ook in het midden van het bereik van 0 tot en met 255 zit. Heb je al uitgerekend waar dat dan uitkomt ?

De snelheid kun je met deze werkwijze niet veranderen. Lees even dit bericht (klik!). Dan denk je eerst: "Wat heeft dat met mijn vraag te maken ?" Maar als je die stof goed begrepen hebt, dan snap je ook hoe je dit het beste aan kunt pakken.

128 is de helft van 255 en dus als je de joystick loslaat staat hij in het midden van het bereik, zo kom je dus aan het getal. als beginner is die joystick library erg moeilijk en heb je best veel handleiding nodig. voor je zoon zou ik dus een tussenstap maken met beweeg naar rechts/links ipv positie is joystick. dan kun je het allemaal rustiger aandoen, om even simpel te zeggen positie =oudepositie+joystick-oudejoystick. haal al die moeilijke commandos uit elkaar, vooral voor je zoon werkt dat makkelijker, je doet nu een write.servo=readjoystickenveranderwaarde en allemaal tegelijk, zonder te weten of het allemaal integers zijn (dus niet)