Как в Arduino развернуть данные?
развернутьКак-то так// LEFT --> [127 ... 0] --> [32 ... 4095]
// 
// RIGHT --> [129 ... 255] --> [32 ... 4095]

int calc_speed(int value)
{
  int speed = 0; // для наглядности без ? :
  if(value > 128)
  {
    speed = 4095 / 127 * (value - 128);
  }
  else
  {
    speed = 4095 / 127 * (128 - value);
  }
  return speed;
}

void drive_forward(int speed)
{
  MSS.analogWrite(15, 0);
  MSS.analogWrite(14, speed);                                
}

void drive_backward(int speed)
{
  MSS.analogWrite(14, 0);                             
  MSS.analogWrite(15, speed);
}

void stop()
{
  MSS.analogWrite(14, 0);                             
  MSS.analogWrite(15, 0);
}

void move()
{
  int ds = ps2x.Analog(PSS_LX);
  
  if(ds > 128)
  {
    drive_forward(calc_speed(ds));
  }
  else if(ds < 128)
  {
    drive_backward(calc_speed(ds));
  }
  else
  {
    stop();
  }
}
Если совсем примитивно map тебе в помощь. Если реально, то обороты двигателя серьезно зависят от нагрузки и не будут пропорциональны ШИМ. Т.е. если  ШИМ 100 увеличить до 200 это вовсе не значит, что обороты возрастут в двое. В случае если нагрузка постоянная то можно записать таблицу значений ШИМ для каждого значения джойстика (или не для каждого, а промежуточные вычеслять)