Muovere servo motori con Joystick PS2

Salve,
Sto realizzando il mio progetto per la maturità, ma mi trovo difronte a dei problemi.
Il progetto consiste in un braccio robotico (AL5D della Lynxmotion per l'esattezza) che viene controllato mediante un joystick della PS2. Quello che voglio ottenere e non so minimamente come fare :-[ è che alla pressione del tasto select, tutti i servomotori vanno alla posizione di partenza, indipendentemente dalla posizione in cui si trovano. Altra cosa che non riesco a fare è che alla pressione della freccia giù/sù o del tasto R1/L1 non ottengo alcun movimento. Altra cosa è che con il mio codice, ottengo un movimento dei servomotori in base al movimento delle levette analogiche, e fin qui tutto bene però se rilascio le levette, i motori ritornano alla posizione di partenza. Io vorrei ottenere ad esempio che il movimento della levetta analogica sinistra verso destra corrisponde il movimento orario del servo per la rotazione della base viceversa il movimento verso sinistra corrisponde il movimento del medesimo servo nel senso opposto. Avevo pensato ad una serie di if, ad esempio (PSS_RY>140) muovi il servo verso destra viceversa if (PSS_RY<110) muovi il servo verso sinistra. Ma non saprei se ciò è corretto e come tradurre questo in programma. Il mio codice è il seguente. Spero che qualcuno mi possa aiutare. Ringrazio per l'attenzione.

#include <PS2X_lib.h> //includo la libreria per il Joystick
#include <Servo.h> //includo la libreria per i servomotori

Servo pinza; //Servo per l'apertura/chiusura della pinza
Servo Rotpinza; //Servo per la rotazione della pinza
Servo Inclpinza; //Servo l'inclinazione della pinza
Servo Inclbraccio2; //Servo superiore inclinazione braccio
Servo Inclbraccio1; //Servo inferiore inclinazione braccio
Servo Rotbase; //Servo per la rotazione della base

PS2X ps2x; // create PS2 Controller Class

int ForwardVal = 0;  //Value read off the PS2 Right Stick up/down.
int YawLeftVal = 0;  //Value read off the PS2 Right Stick left/right
int UpVal = 0; //Value read off the PS2 Left Stick up/down
int RollLeftVal = 0; // Value read off the PS2 Left Stick left/right
int InclPolso = 90;
int AperturaPinz = 90;

int upLraw = 0;  //Variables to carry the actual raw data for the ESCs
int upRraw = 0;
int HLraw = 0;
int HRraw = 0;

void setup(){
Serial.begin(9600);
  pinza.attach(2); //Servo apertura/chiusura pinza pin 2
  Rotpinza.attach(3); //Servo rotazione pinza pin 3
  Inclpinza.attach(4); //Servo inclinazione pinza pin 4
  Inclbraccio2.attach(5); //Servo superiore inclinazione braccio pin 5 
  Inclbraccio1.attach(6); //Servo inferiore inclinazione braccio pin 6
  Rotbase.attach(7); //Servo rotazione base pin 7
  ps2x.config_gamepad(13,11,10,12, false, false);
}

void loop(){
  
    ps2x.read_gamepad();          //read controller

    if(ps2x.Button(PSB_SELECT)) //impostare tutti i motori nella posizione 0 ovvero di partenza ??
         { }
         
     if(ps2x.Button(PSB_PAD_UP)) {   //will be TRUE as long as button is pressed
     InclPolso = InclPolso + 1; 
     Inclpinza.write(InclPolso);//movimento verso l'alto del motore dell'inclinazione del polso      
      }
      if(ps2x.Button(PSB_PAD_DOWN)){
      InclPolso = InclPolso - 1;
      Inclpinza.write(InclPolso); //movimento verso il basso del motore dell'inclinazione del polso
      }         
      
    if(ps2x.Button(PSB_R1)) {
       AperturaPinz = AperturaPinz -1;
       pinza.write(AperturaPinz);
       }
       
    if(ps2x.Button(PSB_L1)) {
       AperturaPinz = AperturaPinz +1;   
       pinza.write(AperturaPinz);   
       }
     
  ForwardVal = ps2x.Analog(PSS_RY);
  YawLeftVal = ps2x.Analog(PSS_RX);
  UpVal = ps2x.Analog(PSS_LY);
  RollLeftVal = ps2x.Analog(PSS_LX);
   upLraw = (128-UpVal)+(128-RollLeftVal)/2;  //This will be up to a value of 192 
   upRraw = (128-UpVal)-(128-RollLeftVal)/2;  //This will be up to a value of 192
   HLraw = (128-ForwardVal)+(128-YawLeftVal);  //This will be up to a value of 256
   HRraw = (128-ForwardVal)-(128-YawLeftVal);  //This will be up to a value of 256

//Scale the values to be suitable for ESCs and Servos
  upLraw=map(upLraw,-256,256,0,179);
  upRraw=map(upRraw,-256,256,0,179);
  HLraw=map(HLraw,-256,256,0,179);
  HRraw=map(HRraw,-256,256,0,179); 

//Write it to the Servos or ESCs 

  Inclbraccio1.write(upLraw); 
  Rotbase.write(upRraw);
  Inclbraccio2.write(HLraw);
  Rotpinza.write(HRraw);   
  
 delay(50); }