dúvida em código/lógica

Bom dia,
montei um antigo carrinho de rádio controle e estou comandando ele com um app celular e solicito ajuda no código para retornar a direção ao centro, eu fiz assim:
1)criei uma váriável
int esqdir = 1;
2)criei as funçoes

void direita() {
  for (int i = 90; i <= 120; i++) {
    direcao.write(i);
    delay(10);
  } esqdir = 2;
}

void esquerda() {
  for (int i = 90; i >= 60; i--) {
    direcao.write(i);
    delay(10);
  } esqdir = 3;
}

3)para voltar ao centro

void centro() {
  if (esqdir = 1) {}
  if (esqdir = 2) {
    for (int i = 120; i >= 90; i--) {
      direcao.write(i);
      delay(10);
    }
  }
  if (esqdir = 3) {
    for (int i = 60; i <= 90; i++) {
      direcao.write(i);
      delay(10);
    }
  }
  delay(10);
}

ou seja cada vez que o loop reinicia a variavel esqdir esta com um dos tres valores, 1 se iniciou o programa, 2 se o usuário dobrou direita e 3 se o usuário dobrou a esquerda. Acontece que o retorno ao centro (ângulo 90 servo) esta com tipo um tranco na direcao como se ele nao estivesse seguino os blocos de if para saber se ele estava nos 60 ou 120 … espero ter me feito entender … obrigado .

!(http:// )

Quando é que chamas a função centro() ?

Custa muito meter o código todo aqui?

Isto não funciona:

  if (esqdir = 1) {}
  if (esqdir = 2) {

nos if's utilizam-se dois '==', ou seja:

  if (esqdir == 1) {}
  if (esqdir == 2) {

Admitindo que tudo o resto está certo. Como isto estava mal, não olhei para mais nada.

É claro ! … muito obrigado ! vou postar o código todo como solicitado JÁ COM A CORREÇÃO feita …

#include <Servo.h>
#include <Ultrasonic.h>
Ultrasonic ultrassomf(13, 12);
Ultrasonic ultrassomr(4, 2);
Servo direcao;
/*Pinagem no arduino*/
int i = 0;
int n = 0;
int IN1 = 8 ;//motor A
int IN2 = 9 ;//motor A
int IN3 = 10 ;//motor B
int IN4 = 11 ;//motor B
int velA = 0; //velocidade lida motor A
int velB = 0; //velocidade lida motor B
int feco = 12;//eco do ultra frente
int ftrig = 13;//trig do ultra frente
int reco = 2;//eco do ultra re
int rtrig = 4;//trig do ultra re
int farol = 7;
long duracaof = 0;
long duracaor = 0;
long distanciaf = 0;
long distanciar = 0;
int esqdir = 1;

/*Funcoes*/
void direita() {
  for (int i = 90; i <= 120; i++) {
    direcao.write(i);
    delay(10);
  } esqdir = 2;
}
void centro() {
  if (esqdir == 1) {}
  if (esqdir == 2) {
    for (int i = 120; i >= 90; i--) {
      direcao.write(i);
      delay(10);
    }
  }
  if (esqdir == 3) {
    for (int i = 60; i <= 90; i++) {
      direcao.write(i);
      delay(10);
    }
  }
  delay(10);
}
void esquerda() {
  for (int i = 90; i >= 60; i--) {
    direcao.write(i);
    delay(10);
  } esqdir = 3;
}
void direitaLonga() {
  for (int i = 90; i <= 120; i++) {
    direcao.write(i);
    delay(10);
  } delay(6000);
  for (int i = 120; i >= 90; i--) {
    direcao.write(i);
    delay(10);
  }
}

void esquerdaLonga() {
  for (int i = 90; i >= 60; i--) {
    direcao.write(i);
    delay(10);
  } delay(6000);
  for (int i = 60; i <= 90; i++) {
    direcao.write(i);
    delay(10);
  }
}
void desligaMotores() {
  digitalWrite(IN1, LOW);
  digitalWrite(IN2, LOW);
  digitalWrite(IN3, LOW);
  digitalWrite(IN4, LOW);
}
void frente() {
  digitalWrite(IN1, HIGH);
  digitalWrite(IN2, LOW);
  digitalWrite(IN3, LOW);
  digitalWrite(IN4, HIGH);
  for (int i = 0; i < 150; i++) {
    analogWrite(6, i);
    analogWrite(5, i);
    delay(10);
  }
}
void re() {
  digitalWrite(IN1, LOW);
  digitalWrite(IN2, HIGH);
  digitalWrite(IN3, HIGH);
  digitalWrite(IN4, LOW);
  for (int i = 0; i < 150; i++) {
    analogWrite(6, i);
    analogWrite(5, i);
    delay(10);
  }
}
void aceleraRe() {

  for (int i = 150, j = 150; i < 255, j < 255; i++, j++) {
    analogWrite(6, i);
    analogWrite(5, j);
    delay(10);
  }
}
void desaceleraRe() {

  for (int i = 255, j = 255; i > 150 , j > 150 ; i--, j--) {
    analogWrite(6, i);
    analogWrite(5, j);
    delay(10);
  }
}
void aceleraFrente() {


  for (int i = 150, j = 150; i < 255, j < 255; i++, j++) {
    analogWrite(6, i);
    analogWrite(5, j);
    delay(10);
  }
}
void desaceleraFrente() {

  for (int i = 255, j = 255; i > 150 , j > 150 ; i--, j--) {
    analogWrite(6, i);
    analogWrite(5, j);
    delay(10);
  }

}
void ligaFarol() {
  digitalWrite(farol, HIGH);
}


void desligaFarol() {
  digitalWrite(farol, LOW);
}

void setup() {
  direcao.attach(3);
  Serial.begin(9600);
  direcao.write(90);
  Serial.flush(); //Limpando a memoria do serial

  pinMode(IN1, OUTPUT); //configurando pino8(IN1)
  pinMode(IN2, OUTPUT); //configurando pino9(IN2)
  pinMode(IN3, OUTPUT); //configurando pino10(IN3)
  pinMode(IN4, OUTPUT); //configurando pino11(IN4)
  pinMode(6, OUTPUT); //configurando pino 6 pwm do motor A
  pinMode(5, OUTPUT); //configurando pino 5 pwm do motor B
  pinMode(reco, INPUT); //configurando pino 6 pwm do ultrasom
  pinMode(rtrig, OUTPUT); //configurando pino 5 pwm do ultrasom
  pinMode(feco, INPUT); //configurando pino 2 pwm do ultrasom
  pinMode(ftrig, OUTPUT); //configurando pino 4 pwm do ultrasom
  pinMode(farol, OUTPUT); //configurando pino 6 pwm para controlar farol
}

void loop() {
  /*controle por ultra som*/

  distanciaf = ultrassomf.Ranging(CM);// ultrassom.Ranging(CM) retorna a distancia em centímetros(CM) 
  distanciar = ultrassomr.Ranging(CM);// ultrassom.Ranging(CM) retorna a distancia em centímetros(CM) 


  if (distanciaf <= 20) {
    desligaMotores();

  }
  if (distanciar <= 20) {
    desligaMotores();

  }
  if (Serial.available() > 0) { //Teste se porta serial esta recebendo dados



    n = Serial.read(); //leitura de dados

    if (n == 97) { //virar a esquerda -> a
      esquerda();
      delay(100);
    } delay(100);

    if (n == 100) { //virar a direita -> d
      direita();
      delay(100);
    } delay(100);

    if (n == 112) { //virar ao centro -> p
      centro();
      delay(100);
    } delay(100);

    if (n == 101) { //liga o farol -> e
      ligaFarol();
      delay(100);
    } delay(100);

    if (n == 114) { //desliga o farol -> r
      desligaFarol();
      delay(100);
    } delay(100);

    if (n == 119) { //liga os motores -> w
      frente();
      delay(100);
    } delay(100);
    delay(100);

    if (n == 113) { //desliga os motores -> q
      desligaMotores();
      delay(100);
    } delay(100);

    if (n == 115) { //marcha re -> s
      re();
      delay(100);
    } delay(100);
    if (n == 116) { //Mais Frente -> t
      aceleraFrente();
      delay(100);
    } delay(100);

    if (n == 121) { //Menos Frente -> y
      desaceleraFrente();
      delay(100);
    } delay(100);
    delay(100);

    if (n == 117) { //Mais Ré -> u
      aceleraRe();
      delay(100);
    } delay(100);

    if (n == 105) { //Menos Ré -> i
      desaceleraRe();
      delay(100);
    } delay(100);

  }
  Serial.flush();

}
/**/

tela do app android

Não percebi se funcionou ou se ainda há algum problema.

Era exatamente isto, novamente muito obrigado !