radiocomando rc motor shield rev3

inanzi tutto non sò come mai se copi il codice con edit>copia per forum non mi copia più nel modo tag code ma copia normalissimamente(nel modo che non ci capisci un cazzo).
allora ho aggiunto un altro blocco map.sembrerebbe funzionare solo che non sò come mai il motore smatta quando gli impulsi di durata sono tra 1400 e 1600,mentre invece dovrebbe essere fermo in quel range o sbaglio?in più quando arrivi a fondo scala con la levetta del telecomando e poi molli,a volte il motore non si ferma rimane alla massima velocità.

int pwmmotor = 3; // motor 1 PWM
int dirmotor = 12; // motor 1 DIR
int servo1 = 2; // r/c channel 1
int power = 4; // power for R/C receiver, stays HIGH (5v).

volatile unsigned long servo1_startPulse;
volatile unsigned servo1_val;
volatile unsigned servo2_val;
volatile int adj_val1;
volatile int adj_val2;
volatile int servo1_Ready;
volatile int durata;

int low1 = 1100;
int high1 = 1400;
int low2 = 1600;
int high2 = 1900;
int n = 0;

void setup() {

Serial.begin(9600);

pinMode(pwmmotor, OUTPUT);
pinMode(dirmotor, OUTPUT);
pinMode(power, OUTPUT);
pinMode(servo1, INPUT);

digitalWrite(power, HIGH);

delay(1200);
}

void loop() {

durata = pulseIn(servo1,HIGH); // durata impulso

adj_val1 = map(constrain(durata, 1100, 1400), low1, high1, 255, 0);
constrain(adj_val1, 0, 255);

adj_val2 = map(constrain(durata, 1600, 1900), low2, high2, 0, 255);
constrain(adj_val2, 0, 255);

if(durata > 1600) {
digitalWrite (dirmotor,HIGH);
analogWrite (pwmmotor,adj_val2);
}

if(durata < 1400) {
digitalWrite (dirmotor,LOW);
analogWrite (pwmmotor,adj_val1);
}

Serial.print("dura: ");
Serial.print(durata);
Serial.print("ch1: ");
Serial.print(adj_val1);
Serial.print(" ");
Serial.print("rc1: ");
Serial.print(servo1_val);
Serial.print(" ");
Serial.print("loop counter: ");
Serial.print(n);
Serial.println(" ");

}