Cerco aiuto per invertire map tramite pulsante o switch!Grazie!

Buongiorno a tutti.Ho realizzato un sistema per comandare una macchinina tramite moduli nrf24l01.Il tutto funziona bene.Ora vorrei aggiungere la possibilità di invertire la corsa del servo direzionale(X) tramite la pressione di un pulsante o uno switch per fare in modo che tale elettronica possa adattarsi a qualsiasi modello senza dover intervenire meccanicamente montando il servo al contrario.Quindi vorrei farlo tramite software.Praticamente al posto di (x,0,1023,30,150) tramite switch dovrei avere la possibilità di settare (x,0,1023,150,30).Come posso fare???Vi allego il codice della TX.Grazie mille!

//Telecomando 2.4ghz per modellismo.
//Collegamenti del modulo RF24L01 ad Arduino:
// 1 - GND
// 2 - VCC 3.3V !!! NOT 5V
// 3 - CE to Arduino pin 9
// 4 - CSN to Arduino pin 10
// 5 - SCK to Arduino pin 13
// 6 - MOSI to Arduino pin 11
// 7 - MISO to Arduino pin 12
// 8 - UNUSED


#include <Servo.h>
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
//#include "printf.h"

//Telemetria
// Led Pins
int red = 7;
int green = 6;

// Print battery voltage
// with Voltage Divider R1=22k R2=10k
#define Bled_pin 8

#define CE_PIN  9
#define CSN_PIN 10
#define JOYSTICK_X A1
#define JOYSTICK_Y A0
#define JOYSTICK_Z A2
int y;
int x;
int z;

// this is not the channel address, but the transmitter address
//const uint64_t pipe = 0xE8E8F0F0E1LL;

// Radio pipe addresses for the 2 nodes to communicate.
const uint64_t pipes[2] = { 0xF0F0F0F0E1LL, 0xF0F0F0F0D2LL };

RF24 radio(CE_PIN, CSN_PIN);

int joystick[3];

void setup (void)
{
  pinMode(Bled_pin, OUTPUT);
  digitalWrite(Bled_pin, LOW);
  Serial.begin(9600);
  radio.begin();
  radio.setChannel(80);
  radio.setDataRate(RF24_2MBPS);
  //radio.setDataRate(RF24_1MBPS);
  //radio.setDataRate(RF24_250KBPS);
  radio.setPALevel(RF24_PA_MAX);
  // optionally, increase the delay between retries & # of retries
  radio.setRetries(12, 12);
  // optionally, reduce the payload size.  seems to
  // improve reliability
  radio.setPayloadSize(5);
  //radio.openWritingPipe(pipe);
  radio.openWritingPipe(pipes[0]);
  radio.openReadingPipe(1, pipes[1]);

  radio.startListening();

  // Configure the LED
  pinMode(green, OUTPUT);
  pinMode(red, OUTPUT);
  digitalWrite(green, LOW);
  digitalWrite(red, LOW);

}


void sendOrder()
{
  {
    printVolts();
  }

  x = analogRead(JOYSTICK_X);
  x = map(x , 0, 1023, 30, 150);
  joystick[0] = x;
  Serial.print("    ");
  Serial.print(x);

  y = analogRead(JOYSTICK_Y);
  y = map(y , 0, 1023, 0, 255 * 2);
  joystick[1] = y;
  Serial.print("    ");
  Serial.print(y);

  z = digitalRead(JOYSTICK_Z);
  joystick[2] = z;
  Serial.print("    ");
  Serial.print(z);

  // First, stop listening so we can talk.
  radio.stopListening();

  // Take the time, and send it.  This will block until complete
  radio.write( &joystick, sizeof(joystick) );//  radio.write (joystick, sizeof(joystick) );

  // Now, continue listening
  radio.startListening();

  // Wait here until we get a response, or timeout (10ms)
  unsigned long started_waiting_at = millis();
  bool timeout = false;
  while ( ! radio.available() && ! timeout )
    if (millis() - started_waiting_at > 35 )
      timeout = true;

  // Describe the results
  if ( timeout )
  {
    // At this point the ACK did not arrived so the red LED has to be on
    digitalWrite(green, LOW);
    digitalWrite(red, HIGH);
  }
  else
  {
    // Grab the response, compare, and send to debugging spew
    unsigned long response;
    radio.read( &response, sizeof(unsigned long) );

    // At this point the ACK did arrived so the green LED has to be on
    digitalWrite(green, HIGH);
    digitalWrite(red, LOW);
  }

}
void printVolts()
{
  int sensorValue = analogRead(A3); //read the A3 pin value
  float voltage = sensorValue * (2.3 / 1023.00) * 2; //convert the value to a true voltage.//2.3
  if (voltage < 4.5 ) //set the voltage considered low battery here//4.2
  {
    digitalWrite(Bled_pin, HIGH);
  }

}
void loop(void)
{
  sendOrder();

}

Ciao, secondo me dovrebbe essere sufficiente modificare la riga di codice

x = map(x , 0, 1023, 30, 150);

in

x = getMappedValue(x);

e ti fai una funzione simile a questa

int getMappedValue(x){
  byte switchPos = digitalRead(INPUT_PIN);
  if(switchPos==HIGH){
    return map(x , 0, 1023, 150, 30);
  }
  else{
    return map(x , 0, 1023, 30, 150);
  }
}

La funzione non è stata provata e ovviamente deve essere rifinita (Es. debounce, ecc.) ma come inizio direi che potrebbe essere un'idea