código de sensor de ultrasonido

Hola, estoy creando un robot con Arduino UNO que se mueva hacia delante hasta que vea una pared y entonces se pare (mas adelante ya haré que gire hacia un lado o otro) pero he creado el código y sin dar error el coche no se mueve, ya he comprobado si los pines están bien conectados y el coche funcionaba hasta que adapté el código al sensor de ultrasonido.
El código es el siguiente:

#define trigPin 3
#define echoPin 4

const int pinIN1 = 5;
const int pinIN2 = 6;
const int pinIN3 = 7;
const int pinIN4 = 8;
const int pinENA = 9;
const int pinENB = 10;

const int waitTime = 2000; //esperar
const int speed = 200; //velocidad de giro

const int pinMotorA[3] = {pinENA, pinIN1, pinIN2};
const int pinMotorB[3] = {pinENB, pinIN3, pinIN4};

void setup() {
   pinMode(pinIN1, OUTPUT);
   pinMode(pinIN2, OUTPUT);
   pinMode(pinENA, OUTPUT);
   pinMode(pinIN3, OUTPUT);
   pinMode(pinIN4, OUTPUT);
   pinMode(pinENB, OUTPUT);
   Serial.begin (9600);
   pinMode(trigPin, OUTPUT);
   pinMode(echoPin, INPUT);
}

void loop() {
  long duracion, distancia ;
            digitalWrite(trigPin, LOW);        // Nos aseguramos de que el trigger está desactivado
            delayMicroseconds(2);              // Para asegurarnos de que el trigger esta LOW
            digitalWrite(trigPin, HIGH);       // Activamos el pulso de salida
            delayMicroseconds(10);             // Esperamos 10µs. El pulso sigue active este tiempo
            digitalWrite(trigPin, LOW);        // Cortamos el pulso y a esperar el echo
            duracion = pulseIn(echoPin, HIGH);
            distancia = duracion / 2 / 29.1  ;
            Serial.println(String(distancia) + " cm.");
            int Limite = 200;                 // Medida en vacío del sensor
            if ( distancia < Limite){
                  fullStop(pinMotorA);
                  fullStop(pinMotorB);
                  delay(waitTime);
                 
            }else
              moveForward(pinMotorA, 180);
              moveForward(pinMotorB, 180);
              delay (500) ;                  // Para limitar el número de mediciones
  /*
  
    moveRight(pinMotorA, 180);
    moveRight(pinMotorB, 180);
   delay(waitTime);
 
   moveLeft(pinMotorA, 180);
   moveLeft(pinMotorB, 180);
   delay(waitTime);
 
   fullStop(pinMotorA);
   fullStop(pinMotorB);
   delay(waitTime);
   */
}
void moveForward(const int pinMotor[3], int speed) //mover hacia delante
{
   digitalWrite(pinMotor[1], HIGH);
   digitalWrite(pinMotor[2], HIGH);
   
   analogWrite(pinMotor[0], speed);
}

void moveRight(const int pinMotor[3], int speed) //mover a la derecha
{
   digitalWrite(pinMotor[1], HIGH);
   digitalWrite(pinMotor[2], LOW);
 
   analogWrite(pinMotor[0], speed);
}
 
void moveLeft(const int pinMotor[3], int speed) //mover a la izquierda
{
   digitalWrite(pinMotor[1], LOW);
   digitalWrite(pinMotor[2], HIGH);
 
   analogWrite(pinMotor[0], speed);
}
 
void fullStop(const int pinMotor[3]) //parar
{
   digitalWrite(pinMotor[1], LOW);
   digitalWrite(pinMotor[2], LOW);
 
   analogWrite(pinMotor[0], 0);
}

Gracias adelantadas.

Lee el privado. bien x como posteaste el código.

Tomaremos las cosas buenas que has hechos y le daremos mas forma

Supongo que has verifiado que el sensor ultrasónico trabaja correctamente. Eso espero!!

Lo mejor es que no tengas todo eso que veo en el loop sino que hagas llamados a metodos o procedimientos y/o funciones.

No me gustan los delay, ya lo dije pero veamos si esto funciona?

#define TRIGPIN    3
#define ECHOPIN    4

const int pinIN1 = 5;
const int pinIN2 = 6;
const int pinIN3 = 7;
const int pinIN4 = 8;
const int pinENA = 9;
const int pinENB = 10;

const int waitTime = 2000; //esperar
const int speed = 200; //velocidad de giro

const int pinMotorA[3] = {pinENA, pinIN1, pinIN2};
const int pinMotorB[3] = {pinENB, pinIN3, pinIN4};
int Limite = 200;                 // Medida en vacío del sensor

void setup() {
  Serial.begin (9600);
  pinMode(pinIN1, OUTPUT);
  pinMode(pinIN2, OUTPUT);
  pinMode(pinENA, OUTPUT);
  pinMode(pinIN3, OUTPUT);
  pinMode(pinIN4, OUTPUT);
  pinMode(pinENB, OUTPUT);

  pinMode(TRIGPIN, OUTPUT);
  pinMode(ECHOPIN, INPUT);
}

void loop() {
  long distancia;

  distancia = sensor();
  Serial.println(String(distancia) + " cm.");

  if (distancia < Limite) {
      fullStop(pinMotorA);
      fullStop(pinMotorB);
      delay(waitTime);          // esto detiene tus lecturas del sensor
  } else {
      moveForward(pinMotorA, 180);
      moveForward(pinMotorB, 180);
      delay (500) ;             // Para limitar el número de mediciones     
  }
  /*
  
  moveRight(pinMotorA, 180);
  moveRight(pinMotorB, 180);
  delay(waitTime);
 
  moveLeft(pinMotorA, 180);
  moveLeft(pinMotorB, 180);
  delay(waitTime);

  fullStop(pinMotorA);
  fullStop(pinMotorB);
  delay(waitTime);
  */
}

long sensor() {
  long duracion, distancia ;
  digitalWrite(TRIGPIN, LOW);        // Nos aseguramos de que el trigger está desactivado
  delayMicroseconds(2);              // Para asegurarnos de que el trigger esta LOW
  digitalWrite(TRIGPIN, HIGH);       // Activamos el pulso de salida
  delayMicroseconds(10);             // Esperamos 10µs. El pulso sigue active este tiempo
  digitalWrite(TRIGPIN, LOW);        // Cortamos el pulso y a esperar el echo
  duracion = pulseIn(ECHOPIN, HIGH); // <= NUNCA Me gusto pulseIn pero..
  return (duracion/58.2);
}


void moveForward(const int pinMotor[3], int speed) //mover hacia delante
{
   digitalWrite(pinMotor[1], HIGH);
   digitalWrite(pinMotor[2], HIGH);
   
   analogWrite(pinMotor[0], speed);
}

void moveRight(const int pinMotor[3], int speed) //mover a la derecha
{
   digitalWrite(pinMotor[1], HIGH);
   digitalWrite(pinMotor[2], LOW);
 
   analogWrite(pinMotor[0], speed);
}
 
void moveLeft(const int pinMotor[3], int speed) //mover a la izquierda
{
   digitalWrite(pinMotor[1], LOW);
   digitalWrite(pinMotor[2], HIGH);
 
   analogWrite(pinMotor[0], speed);
}
 
void fullStop(const int pinMotor[3]) //parar
{
   digitalWrite(pinMotor[1], LOW);
   digitalWrite(pinMotor[2], LOW);
 
   analogWrite(pinMotor[0], 0);
}

Tu error estaba acá, en el else que no tenia {} llaves

 }else // <= FALTA LLAVE
              moveForward(pinMotorA, 180);
              moveForward(pinMotorB, 180);
              delay (500) ;                  // Para limitar el número de mediciones
// <= FALTA LLAVE

Ok, gracias por ordenarme un poco el código. En principio después del else no hace falta poner unos corchetes pero aun así los he incluido copiando el código que me has arreglado tu, ademas de que me gusta poner los corchetes después de un else y en este caso se me ha olvidado. Aun con tu esfuerzo y al no ser los corchetes del else el error, el código sigue sin funcionar.

Bueno pero yo comencé preguntando

Supongo que has verifiado que el sensor ultrasónico trabaja correctamente. Eso espero!!

Funciona? Te da valores correctos?

Otro tema.. probaste las funciones de Parada, avance, Giro izquierda o derecha del motor?

Todo eso indipendientemente del sensor?

Si todo funciona y el código lo probé antes de ser incluido el sensor, y el sensor lo cambié por otro por si acaso no funcionaba y me pasa exactamente lo mismo asique no es problema de ninguna pieza ni tampoco del código anterior al del sensor

Porque no cambias ese limite de 200 cmts que son 2 mts a algo mas chico.
coloca 20 cmt por dar un dato.
Creo que por ahi esta el problema, le estas diciendo si no hay 2 mts libres no te muevas y no se mueve.

Acabo de probar lo que tu me has dicho de cambiar el limite a 20 cm y nada sigue igual, luego lo he vuelto a cambiar a 2 cm para probar un dato aun mas pequeño y a seguido sin moverse y mas tarde para comprobar si era problema de la distancia o no lo he vuelto a cambiar a 0 cm y a pasado exactamente lo mismo que las ultimas dos veces, nada. No creo que la distancia que recibe el sensor sea el problema ya que por el momento el sensor no lo tengo inmóbil y antes de que me dijeras que cambiase la distancia limite ya iba moviendo el sensor hacia lugares donde sabia que habían mas de dos metros de distancia antes de encontrar una pared o obstáculo. La verdad esque se me acaban las ideas a mi también así que si necesitas mas información de como tengo puesta alguna cosa del Arduino o lo que sea pídemelo y yo te lo facilito.

Como la distancia no va a ser el problema?
A ver si comprendes que hace el programa.

Si dices que las funciones moverse y stop funcionan por separado nada deberia cambiar cuando lee la distancia que supongo la indica correctamente.
Tienes un probelma en alguno de los dos.
O no mide distancia o no se mueve/detiene como dices.
Ahora que so no funcione... me sorprende.

Ejecuta un codigo simple que mueva el carro hacia adelante y 10 segundos despus lo detenga por 5 segu y de nuevo adelante
si lo hace tus funciones adelante y parar trabajan bien.
En todo ese proces deja que ande el sensor ultrasonico y que muestre valores pero sin controlar el movimiento.
Y nos cuentas como se porta todo.

Siento haber tardado tanto en contestar, estaba ocupado. Ya he hecho lo que me dijiste, por una parte he aislado el código del movimiento del coche al del sensor y he hecho que vaya hacia adelante, hacia la derecha y hacia la izquierda y todo a ido bien, luego he hecho que el sensor me dijera a cuantos cm esta de un obstáculo y no a habido problema, pero al hacer que todo funcione junto pues no parece funcionar.

Ok... estamos ambos pasando por algo alto muy simple y no veo que es aún.

Mira cual es el error.. que tontería

Limite que tipo de variable usas? int
distancia que tipo de variable usas long
Debe ser iguales.

#define TRIGPIN    3
#define ECHOPIN    4

const int pinIN1 = 5;
const int pinIN2 = 6;
const int pinIN3 = 7;
const int pinIN4 = 8;
const int pinENA = 9;
const int pinENB = 10;

const int waitTime = 2000; //esperar
const int speed = 20; //velocidad de giro

const int pinMotorA[3] = {pinENA, pinIN1, pinIN2};
const int pinMotorB[3] = {pinENB, pinIN3, pinIN4};
int Limite = 20;                 // Medida en vacío del sensor

void setup() {
  Serial.begin (9600);
  pinMode(pinIN1, OUTPUT);
  pinMode(pinIN2, OUTPUT);
  pinMode(pinENA, OUTPUT);
  pinMode(pinIN3, OUTPUT);
  pinMode(pinIN4, OUTPUT);
  pinMode(pinENB, OUTPUT);

  pinMode(TRIGPIN, OUTPUT);
  pinMode(ECHOPIN, INPUT);
}

void loop() {
  int distancia;

  distancia = sensor();
  Serial.println(String(distancia) + " cm.");

  if (distancia < Limite) { // si hay algo a menos de 20 cmts me detengo
      fullStop(pinMotorA);
      fullStop(pinMotorB);
      delay(waitTime);          // esto detiene tus lecturas del sensor
  } else { // sino me muevo.
      moveForward(pinMotorA, 180);
      moveForward(pinMotorB, 180);
      delay (500) ;             // Para limitar el número de mediciones     
  }
}