Problema con la programación debido a una placa escudo

Buenas. Es mi primera vez escribiendo en un foro de este tipo por lo que si falta algún tipo de información intentare darla lo antes posible si se solicita. Compré un modelo de coche con el que quería conseguir una función de autoaparcamiento. Este coche contiene una placa escudo conectada encima de la placa arduino 1(COM3). El modelo del coche es el zeus car kit de la empresa Sunfounder. Este coche viene ya con varios programas que funcionan con esta placa ya que han sido anteriormente configurados, pero como me era necesario he tenido que comprar mas piezas y modificar su estructura añadiendo 2 sensores de ultrasonido más (trasero y lateral derecho) aparte del delantero que tiene ya. Utiliza ruedas 360º y cada una va dirigida por un motor diferente. He intentado programarlo pero no funciona y no logro ver los errores. Dejo aqui el programa y el enlace al modelo del robot. https://docs.sunfounder.com/projects/zeus-car/en/latest/get_started/programming_mode.html

#include <Arduino.h>
#include <SoftPWM.h>
#include <NewPing.h>

// Definición de pines para los motores
#define MOTOR_PINS (uint8_t[8]) { 3, 4, 5, 6, A3, A2, A1, A0 }
#define MOTOR_DIRECTIONS (uint8_t[4]) { 1, 0, 0, 1 }

// Configuración de sensores de ultrasonidos
#define TRIG_PIN_FRONT 7
#define ECHO_PIN_FRONT 8
#define TRIG_PIN_BACK 9
#define ECHO_PIN_BACK 10
#define TRIG_PIN_SIDE 11
#define ECHO_PIN_SIDE 12

#define MAX_DISTANCE 200 // Distancia máxima que pueden detectar los sensores (en cm)

NewPing sonarFront(TRIG_PIN_FRONT, ECHO_PIN_FRONT, MAX_DISTANCE);
NewPing sonarBack(TRIG_PIN_BACK, ECHO_PIN_BACK, MAX_DISTANCE);
NewPing sonarSide(TRIG_PIN_SIDE, ECHO_PIN_SIDE, MAX_DISTANCE);

#define MOTOR_POWER_MIN 28
int8_t power = 80;

void setup() {
  Serial.begin(115200);
  SoftPWMBegin();  // Inicializa SoftPWM
  carBegin();      // Inicializa motores
}

void loop() {
  // Paso 1: Buscar un espacio para aparcar
  carForward(power);
  while (sonarSide.ping_cm() < 50) {
    // Sigue avanzando hasta que detecte un espacio lateral mayor a 50 cm
  }
  carStop();

  // Paso 2: Alinear para el aparcamiento
  carBackward(power); // Retroceder un poco para empezar el giro
  delay(1000);
  carTurnRight(power); // Girar hacia el espacio
  delay(1000);
  carStop();

  // Paso 3: Maniobra de aparcamiento
  while (sonarBack.ping_cm() > 20 && sonarFront.ping_cm() > 20) {
    // Mover el robot hacia atrás y adelante en maniobras hasta quedar en posición
    carRightBackward(power); // Girar hacia atrás y alinear
    delay(1500);
    carStop();
    carForward(power); // Avanzar un poco si es necesario
    delay(1000);
    carStop();
  }
  
  // Paso 4: Finalizar el aparcamiento
  carStop();
  Serial.println("Aparcamiento completado");
  delay(5000); // Espera antes de intentar un nuevo aparcamiento
}

// Funciones para controlar los motores (similar al código anterior)
void carBegin() {
  for (uint8_t i = 0; i < 8; i++) {
    SoftPWMSet(MOTOR_PINS[i], 0);
    SoftPWMSetFadeTime(MOTOR_PINS[i], 100, 100);
  }
}

void carSetMotors(int8_t power0, int8_t power1, int8_t power2, int8_t power3) {
  bool dir[4];
  int8_t power[4] = { power0, power1, power2, power3 };
  int8_t newPower[4];

  for (uint8_t i = 0; i < 4; i++) {
    dir[i] = power[i] > 0;

    if (MOTOR_DIRECTIONS[i]) dir[i] = !dir[i];

    if (power[i] == 0) {
      newPower[i] = 0;
    } else {
      newPower[i] = map(abs(power[i]), 0, 100, MOTOR_POWER_MIN, 255);
    }
    SoftPWMSet(MOTOR_PINS[i * 2], dir[i] * newPower[i]);
    SoftPWMSet(MOTOR_PINS[i * 2 + 1], !dir[i] * newPower[i]);
  }
}

void carForward(int8_t power) {
  carSetMotors(power, power, power, power);
}

void carBackward(int8_t power) {
  carSetMotors(-power, -power, -power, -power);
}

void carLeft(int8_t power) {
  carSetMotors(-power, power, -power, power);
}

void carRight(int8_t power) {
  carSetMotors(power, -power, power, -power);
}

void carLeftForward(int8_t power) {
  carSetMotors(0, power, 0, power);
}

void carLeftBackward(int8_t power) {
  carSetMotors(-power, 0, -power, 0);
}

void carRightForward(int8_t power) {
  carSetMotors(power, 0, power, 0);
}

void carRightBackward(int8_t power) {
  carSetMotors(0, -power, 0, -power);
}

void carTurnLeft(int8_t power) {
  carSetMotors(-power, power, power, -power);
}

void carTurnRight(int8_t power) {
  carSetMotors(power, -power, -power, power);
}

void carStop() {
  carSetMotors(0, 0, 0, 0);
}

  // Paso 1: Buscar un espacio para aparcar
  carForward(power);
  while (sonarSide.ping_cm() < 50) {
    // Sigue avanzando hasta que detecte un espacio lateral mayor a 50 cm
  }

No, no sigue avanzando porque dentro del lazo no hay ninguna instrucción que mueva el vehículo, el código se queda en ese punto esperando detectar una distancia mayor para poder salir del lazo.

Así si

  // Paso 1: Buscar un espacio para aparcar
  carForward(power);
  while (sonarSide.ping_cm() < 50) {
    // Sigue avanzando hasta que detecte un espacio lateral mayor a 50 cm
    carForward(power);
  }

Gracias por la ayuda, pero cuando intento descargar el programa en la placa me aparece este error. He estado buscando pero no se como arreglarlo

C:\Users\slend\AppData\Local\Temp\arduino\sketches\A9923DE986D7C79BEC2A3995FB8B6E0B\libraries\NewPing\NewPing.cpp.o (symbol from plugin): In function `NewPing::timer_ms_cntdwn()':
(.text+0x0): multiple definition of `__vector_7'
C:\Users\slend\AppData\Local\Temp\arduino\sketches\A9923DE986D7C79BEC2A3995FB8B6E0B\libraries\SoftPWM\SoftPWM.cpp.o (symbol from plugin):(.text+0x0): first defined here
collect2.exe: error: ld returned 1 exit status

exit status 1

Compilation error: exit status 1

Hay un uso doble de Newping y SoftPWM del mismo timer.
Probando soluciones.

Prueba esto a ver si funciona

#include <Arduino.h>
//#include <SoftPWM.h>
#include <NewPing.h>

// Definición de pines para los motores
#define MOTOR_PINS \
  (uint8_t[8]) { \
    3, 4, 5, 6, A3, A2, A1, A0 \
  }
#define MOTOR_DIRECTIONS \
  (uint8_t[4]) { \
    1, 0, 0, 1 \
  }

// Configuración de sensores de ultrasonidos
#define TRIG_PIN_FRONT 7
#define ECHO_PIN_FRONT 8
#define TRIG_PIN_BACK  9
#define ECHO_PIN_BACK 10
#define TRIG_PIN_SIDE 11
#define ECHO_PIN_SIDE 12

#define MAX_DISTANCE 200  // Distancia máxima que pueden detectar los sensores (en cm)

NewPing sonarFront(TRIG_PIN_FRONT, ECHO_PIN_FRONT, MAX_DISTANCE);
NewPing sonarBack(TRIG_PIN_BACK, ECHO_PIN_BACK, MAX_DISTANCE);
NewPing sonarSide(TRIG_PIN_SIDE, ECHO_PIN_SIDE, MAX_DISTANCE);

#define MOTOR_POWER_MIN 28
int8_t power = 80;

void setup() {
  Serial.begin(115200);
  //SoftPWMBegin();  // Inicializa SoftPWM
  carBegin();      // Inicializa motores
}

void loop() {
  // Paso 1: Buscar un espacio para aparcar
  carForward(power);
  while (sonarSide.ping_cm() < 50) {
    // Sigue avanzando hasta que detecte un espacio lateral mayor a 50 cm
  }
  carStop();

  // Paso 2: Alinear para el aparcamiento
  carBackward(power);  // Retroceder un poco para empezar el giro
  delay(1000);
  carTurnRight(power);  // Girar hacia el espacio
  delay(1000);
  carStop();

  // Paso 3: Maniobra de aparcamiento
  while (sonarBack.ping_cm() > 20 && sonarFront.ping_cm() > 20) {
    // Mover el robot hacia atrás y adelante en maniobras hasta quedar en posición
    carRightBackward(power);  // Girar hacia atrás y alinear
    delay(1500);
    carStop();
    carForward(power);  // Avanzar un poco si es necesario
    delay(1000);
    carStop();
  }

  // Paso 4: Finalizar el aparcamiento
  carStop();
  Serial.println("Aparcamiento completado");
  delay(5000);  // Espera antes de intentar un nuevo aparcamiento
}

// Funciones para controlar los motores (similar al código anterior)
void carBegin() {
  for (uint8_t i = 0; i < 8; i++) {
    pinMode(MOTOR_PINS[i], OUTPUT);
    analogWrite(MOTOR_PINS[i], 0);  // Inicializar con 0
  }
}

void carSetMotors(int8_t power0, int8_t power1, int8_t power2, int8_t power3) {
  bool dir[4];
  int8_t power[4] = { power0, power1, power2, power3 };
  int8_t newPower[4];

  for (uint8_t i = 0; i < 4; i++) {
    dir[i] = power[i] > 0;

    if (MOTOR_DIRECTIONS[i]) dir[i] = !dir[i];

    if (power[i] == 0) {
      newPower[i] = 0;
    } else {
      newPower[i] = map(abs(power[i]), 0, 100, MOTOR_POWER_MIN, 255);
    }
    analogWrite(MOTOR_PINS[i * 2], dir[i] * newPower[i]);
    analogWrite(MOTOR_PINS[i * 2 + 1], !dir[i] * newPower[i]);
  }
}

void carForward(int8_t power) {
  carSetMotors(power, power, power, power);
}

void carBackward(int8_t power) {
  carSetMotors(-power, -power, -power, -power);
}

void carLeft(int8_t power) {
  carSetMotors(-power, power, -power, power);
}

void carRight(int8_t power) {
  carSetMotors(power, -power, power, -power);
}

void carLeftForward(int8_t power) {
  carSetMotors(0, power, 0, power);
}

void carLeftBackward(int8_t power) {
  carSetMotors(-power, 0, -power, 0);
}

void carRightForward(int8_t power) {
  carSetMotors(power, 0, power, 0);
}

void carRightBackward(int8_t power) {
  carSetMotors(0, -power, 0, -power);
}

void carTurnLeft(int8_t power) {
  carSetMotors(-power, power, power, -power);
}

void carTurnRight(int8_t power) {
  carSetMotors(power, -power, -power, power);
}

void carStop() {
  carSetMotors(0, 0, 0, 0);
}

Este programa ha compilado correctamente pero a la hora de ver si funcionaba solo se ha movido la rueda delantera derecha. Me ocurría algo parecido cuando usaba programas que no tenían en cuenta que había una placa escudo donde se conectan todos los elementos. Tal vez sea por esto pero no estoy seguro.

A ver.. compras algo que te sugiere un programa y el programa sugerido no compila.
Yo para empezar les reclamaría a ellos porque para eso pagué. Por otro lado y en paralelo llevaría adelante una solución alternativa como esta.
Lo que hice fue quitar el problema de SoftPWM que usa un timer usando los pines directamente sin timer.
Si luego el programa no funciona el problema vuelve a ser el programa original.
Tal como @MaximoEsfuerzo te mostró al comienzo, este programa no esta muy bien logrado.
Pero eso debes irlo viendo tu mismo.
Paso a paso.
Verifica si los motores funcionan todos. Cómo? has un programa simple donde haga movimientos por X tiempo, Voy 5 segundos adelante. 5 atras, 5 a derecha 5 a izquierda.
Funcionaron todos? Comienzo a integrarlo con sensores. Me muevo y lo hago paso a paso.

Si observas bien en mi código no contemplé la sugerencia de @MaximoEsfuerzo asi que agrégala. Si no te diste cuenta es porque tampoco tu estabas observando, y siendo el destinatario del problema deberías estar mas atento a cada detalle que te sugerimos.
Yo me enfoqué en el tema del error al compilar.
Entonces modifica esto

void loop() {
  // Paso 1: Buscar un espacio para aparcar
  carForward(power);
  while (sonarSide.ping_cm() < 50) {
     carForward(power);
  }
  carStop();

Lamenteblemente el robot sigue sin dar resultados. Soy muy nuevo en programar con arduino y este programa fue un intento sin éxito. Subí este post con la intención de que alguien pudiera descubrir cual era la base sobre la que podía programar estas cosas, para que pudiera centrarme un poco. Una vez más gracias por la ayuda e intentaré dar alguna novedad si consigo un progreso.

Pero comprendiste lo que te sugerí?
Te sugerí como paso a paso vas viendo si todo funciona individualmente.
Si no puedes hacerlo entonces retrocede y haz cosas mas simples. Un motor nada mas.
Intenta eso
Necesitas guía? O sea, quieres que te digamos cómo hacerlo?
Cuando veo estas consultas me pregunto porque se proponen proyectos tan complejos desde un comienzo sin saber nada de nada?
Hay que ir paso a paso.

Si comprendí y lo que buscaba si que era una guía. Tuve que dar este salto tan grande en cuanto a complejidad debido a que tengo que hacer un proyecto y quería que estuviera lo más completo y mejor posible. Me habría gustado ir paso a paso pero el tiempo no me lo ha permitido.

Eso es relativo.
Solo trabaja mas fuerte y rápido.
En la fase de prueba hacer lo que te digo ahorra tiempo.
Ya que veo que te ahogas en un vaso de agua y disculpa el comentario te daré un empujón

Prueba 1: sensores ultrasónicos.

#include <Arduino.h>
#include <NewPing.h>

// Configuración de sensores de ultrasonidos
#define TRIG_PIN_FRONT 7
#define ECHO_PIN_FRONT 8
#define TRIG_PIN_BACK  9
#define ECHO_PIN_BACK 10
#define TRIG_PIN_SIDE 11
#define ECHO_PIN_SIDE 12

#define MAX_DISTANCE 200  // Distancia máxima que pueden detectar los sensores (en cm)

NewPing sonarFront(TRIG_PIN_FRONT, ECHO_PIN_FRONT, MAX_DISTANCE);
NewPing sonarBack(TRIG_PIN_BACK, ECHO_PIN_BACK, MAX_DISTANCE);
NewPing sonarSide(TRIG_PIN_SIDE, ECHO_PIN_SIDE, MAX_DISTANCE);

void setup() {
  Serial.begin(115200);
  Serial.println("Iniciando prueba sensores ultrasónicos");
}

void loop() {
  // prueba de sensores ultrasonicos
  int front = sonarFront.ping_cm();
  int back = sonarBack.ping_cm();
  int side = sonarSide.ping_cm();
   
  Serial.print("Front : "+String(front));
  Serial.print("Back  : "+String(back));
  Serial.print("Side  : "+String(side));
  delay(500);
}

Si todos funcionan bien recibirás lecturas coherentes de cada uno.

Prueba de motores.

#include <Arduino.h>
#define INTERVALO 5000 // modifica este valor para que sea el tiempo que gustes

// Definición de pines para los motores
#define MOTOR_PINS \
  (uint8_t[8]) { \
    3, 4, 5, 6, A3, A2, A1, A0 \
  }
#define MOTOR_DIRECTIONS \
  (uint8_t[4]) { \
    1, 0, 0, 1 \
  }

#define MOTOR_POWER_MIN 28
int8_t power = 80;

void setup() {
  Serial.begin(115200);
  Serial.println("Prueba de motores, Adelante x 5 seg, luego 5 seg parado");
  Serial.println("Prueba de motores, Atras    x 5 seg, luego 5 seg parado");
  Serial.println("Prueba de motores, Derecha  x 5 seg, luego 5 seg parado");
  Serial.println("Prueba de motores, Izquierdax 5 seg, luego 5 seg parado");
  Serial.println("Repito la secuencia.");
  carBegin();      // Inicializa motores
}

void loop() {
  
  carForward(power);  // Avanzar un poco si es necesario
  Serial.println("Car adelante");
  delay(INTERVALO);
  carStop();
  Serial.println("Car stop");
  delay(INTERVALO);
  carBackward(power);  // Retroceder un poco para empezar el giro
  Serial.println("Car para atras");
  delay(INTERVALO);
  carStop();
  Serial.println("Car stop");
  delay(INTERVALO); 
  carRight(power);  // Girar hacia el espacio
  Serial.println("Car a derecha ");
  delay(INTERVALO);
  carStop();
  Serial.println("Car stop");
  delay(INTERVALO);
  carLeft(power);  // Girar hacia el espacio
  Serial.println("Car a izquierda");
  delay(INTERVALO);
  carStop();
  Serial.println("Car stop");
  delay(INTERVALO);
}

// Funciones para controlar los motores (similar al código anterior)
void carBegin() {
  for (uint8_t i = 0; i < 8; i++) {
    pinMode(MOTOR_PINS[i], OUTPUT);
    analogWrite(MOTOR_PINS[i], 0);  // Inicializar con 0
  }
}

void carSetMotors(int8_t power0, int8_t power1, int8_t power2, int8_t power3) {
  bool dir[4];
  int8_t power[4] = { power0, power1, power2, power3 };
  int8_t newPower[4];

  for (uint8_t i = 0; i < 4; i++) {
    dir[i] = power[i] > 0;

    if (MOTOR_DIRECTIONS[i]) dir[i] = !dir[i];

    if (power[i] == 0) {
      newPower[i] = 0;
    } else {
      newPower[i] = map(abs(power[i]), 0, 100, MOTOR_POWER_MIN, 255);
    }
    analogWrite(MOTOR_PINS[i * 2], dir[i] * newPower[i]);
    analogWrite(MOTOR_PINS[i * 2 + 1], !dir[i] * newPower[i]);
  }
}

void carForward(int8_t power) {
  carSetMotors(power, power, power, power);
}

void carBackward(int8_t power) {
  carSetMotors(-power, -power, -power, -power);
}

void carLeft(int8_t power) {
  carSetMotors(-power, power, -power, power);
}

void carRight(int8_t power) {
  carSetMotors(power, -power, power, -power);
}

void carLeftForward(int8_t power) {
  carSetMotors(0, power, 0, power);
}

void carLeftBackward(int8_t power) {
  carSetMotors(-power, 0, -power, 0);
}

void carRightForward(int8_t power) {
  carSetMotors(power, 0, power, 0);
}

void carRightBackward(int8_t power) {
  carSetMotors(0, -power, 0, -power);
}

void carTurnLeft(int8_t power) {
  carSetMotors(-power, power, power, -power);
}

void carTurnRight(int8_t power) {
  carSetMotors(power, -power, -power, power);
}

void carStop() {
  carSetMotors(0, 0, 0, 0);
}

Con estas dos simples pruebas sabrás que pasa con cada cosa y si algo no funciona lo identificarás puntualmente.
No era tan difícil.
Me llevo 5 min, y sin embargo y mientras por lo que leo pasan días y tu sigues atascado.
Vienes a pedir guía, te la damos y respondes con que no tienes tiempo.
Si supieras resolverlo no hubieras venido a preguntar, lo que te damos son consejos de como resolver justamente esos problemas que se te presentan.

Se debe ser sistemático a la hora de resolver problemas

Ir de menos a mas, y no con todo, no importa CUANTO DEBAS HACER!!!

Resuelve siempre tareas simples que en conjunto darán lo que buscas.

Espero las dos pruebas te sirvan.
Vamos, suerte y detecta qué esta fallando.

Buenas. Muchas gracias por la ayuda de nuevo, me está resultando mucho más fácil. En cuanto a los sensores de ultrasonido, en principio solo funcionaba el delantero, el que venía con el robot ya. Sin embargo, he pensado que como he conectado los nuevos sensores en los pines en los que anteriormente iban los rgb, tengo que utilizar los pines que antes usaban los rgb para que estos funcionen. Por ello me he metido a la web y he visto el apartado de las luces rgb en el que en el programa te ponen los pines que deben utilizarse. No se si esa puede ser la solución a que funcionen bien.
Aquí el código para saber los pins rgb y los que creo que debería usar para los sensores:

#include <Arduino.h>
#include <SoftPWM.h>
#include "ir_remote.h"

/** Indicate whether RGB leds are common-anodes or not 
 * - 0 common cathode
 * - 1 common anode
*/
#define COMMON_ANODE 0

/** Set the pins of RGB leds, the order is R,G,B */
#define RGB_PINS (uint8_t[3]){12, 13, 11}

Por otra parte, el programa que mandaste para hacer mover las ruedas no terminó de funcionar correctamente. Probé por tanto el programa de movimientos básicos de la web del robot y funcionaron correctamente. La dejo también por aqui ya que no logro ver en que se puede diferenciar de la tuya si los pins están definidos de la misma manera.

/*******************************************************************
 * basic_move
 
  Control the direction and speed of motors rotation by pwm,
  to make the car go forward, backward, left turn, right turn and stop.

******************************************************************/
#include <Arduino.h>
#include <SoftPWM.h>

/*
 *  [0]--|||--[1]
 *   |         |
 *   |         |
 *   |         |
 *   |         |
 *  [3]-------[2]
 */
/** Set the pins for the motors */
#define MOTOR_PINS \
  (uint8_t[8]) { \
    3, 4, 5, 6, A3, A2, A1, A0 \
  }
/** Set the positive and negative directions for the motors */
#define MOTOR_DIRECTIONS \
  (uint8_t[4]) { \
    1, 0, 0, 1 \
  }

#define MOTOR_POWER_MIN 28  // 28/255

int8_t power = 80;

void setup() {
  Serial.begin(115200);
  Serial.println("Zeus Car basic move");
  SoftPWMBegin();  //init softpwm, before the motors initialization
  carBegin();      // init motors
}

void loop() {

  carForward(power);
  delay(1000);
  carBackward(power);
  delay(1000);
  carLeft(power);
  delay(1000);
  carRight(power);
  delay(1000);
  carLeftForward(power);
  delay(1000);
  carLeftBackward(power);
  delay(1000);
  carRightForward(power);
  delay(1000);
  carRightBackward(power);
  delay(1000);
  carTurnLeft(power);
  delay(1000);
  carTurnRight(power);
  delay(1000);
  carStop();
  delay(2000);
}


void carBegin() {
  for (uint8_t i = 0; i < 8; i++) {
    SoftPWMSet(MOTOR_PINS[i], 0);
    SoftPWMSetFadeTime(MOTOR_PINS[i], 100, 100);
  }
}

void carSetMotors(int8_t power0, int8_t power1, int8_t power2, int8_t power3) {
  bool dir[4];
  int8_t power[4] = { power0, power1, power2, power3 };
  int8_t newPower[4];

  for (uint8_t i = 0; i < 4; i++) {
    dir[i] = power[i] > 0;

    if (MOTOR_DIRECTIONS[i]) dir[i] = !dir[i];

    if (power[i] == 0) {
      newPower[i] = 0;
    } else {
      newPower[i] = map(abs(power[i]), 0, 100, MOTOR_POWER_MIN, 255);
    }
    SoftPWMSet(MOTOR_PINS[i * 2], dir[i] * newPower[i]);
    SoftPWMSet(MOTOR_PINS[i * 2 + 1], !dir[i] * newPower[i]);
  }
}

void carForward(int8_t power) {
  carSetMotors(power, power, power, power);
}

void carBackward(int8_t power) {
  carSetMotors(-power, -power, -power, -power);
}

void carLeft(int8_t power) {
  carSetMotors(-power, power, -power, power);
}

void carRight(int8_t power) {
  carSetMotors(power, -power, power, -power);
}

void carLeftForward(int8_t power) {
  carSetMotors(0, power, 0, power);
}

void carLeftBackward(int8_t power) {
  carSetMotors(-power, 0, -power, 0);
}

void carRightForward(int8_t power) {
  carSetMotors(power, 0, power, 0);
}

void carRightBackward(int8_t power) {
  carSetMotors(0, -power, 0, -power);
}

void carTurnLeft(int8_t power) {
  carSetMotors(-power, power, power, -power);
}

void carTurnRight(int8_t power) {
  carSetMotors(power, -power, -power, power);
}

void carStop() {
  carSetMotors(0, 0, 0, 0);
}

El problema que tienes,, es que no puedes modificar la estructura del programa de muestra porque está diseñado con delays, fíjate en esta estructuras (hay más de una en el programa)

Cuando ejecutas está función, no puedes utilizar ningún sensor ultrasónico, porque tarda dos segundos en completarse.

Había escrito algo pero evidentemente no lo envié. En ese escrito decía que el programa me parecía pésimo. De principiante. Un principiante hace eso y claramente estará mas que bien. Pero alguien que lo vende no puede tener 3 sensores y esperar 2 segundos a ver si choqué o no choque con algo?
Se requiere una máquina de estados, se necesita usar millis() y ahi pasamos a otro nivel.
Tu hazme caso.
Prueba los sensores y luego los motores
Luego resolveremos todo como corresponde.

No es por defender al vendedor pero lo que presenta @jorgepacheco en #11 (y de donde creo que intenta partir "a las apuradas") es solamente un ejemplo (el archivo es 1_basic_move.ino) para probar el movimiento de los motores y justamente es para principiantes.

El código disponible en la web del fabricante es muy completo y complejo, la verdad me sorprendió.

Claro que si, por ej., quieren unir el código de prueba 1 con el 20, saltándose los 18 intermedios, algo no va a funcionar bien. :wink:

Como dije en el último post, ya probé tanto sensores y motores con los códigos que me enviaste. En cuanto a los sensores dije que solo funcionaba el sensor delantero porque creo que los otros no tenían los pines correctos definidos. Es por eso que mandé los pines que utilizaban los rgb(puertos a los cuales están ahora los sensores conectados).
Las ruedas según el programa que enviaste no lograban funcionar correctamente. Solo funcionaba la izqda delantera y la izqda trasera solo cuando iba hacia atrás. Para comprobar que no fuera problema de los motores, conexiones, etc. usé el programa de movimientos básicos de la web y todas las ruedas funcionaron. No era para usarlo, solo para comprobar.
Entonces por tanto me gustaría saber si debo usar los pines que anteriormente utilizaban los rgb para los sensores y por la parte de las ruedas intentar localizar por qué no funcionaron con el código que mandaste.

Creo que he entendido a que te refieres, pero ese programa del primer post no está bien hecho por casi ningún lado. Es por eso que estoy intentando con la ayuda del foro sentar las bases y otros factores para poder conseguir hacer un código funcional. Gracias por la obsevación, la tendré en cuenta si esto mismo se presenta en un futuro.

No entendí bien lo que querías decir en ese último fragmento del comentario.

Cuál es, no seas enigmático. Ve aportando que funciona para darte soluciones.

Perdón no le di al botón de responderte y supongo que no te llegó la notificación ya que solo puse un mensaje en el foro. Decia que en el #11 tienes el programa del que estoy hablando.

Bueno he tenido que dar un paso atrás y hacer el programa solo con un ultrasonido, el que venía de serie en el modelo del robot. Lo bueno es que funciona, lo malo es que he notado cierto abandono en la ayuda conforme pasaba el tiempo. Es algo que supongo como una normalidad, ya que al fin y al cabo ayudar es algo voluntario y no estás obligado a ello aunque hayas estado haciéndolo. Ha sido igualmente de gratitud la gente que se ha volcado a ayudarme con el problema. Gracias y adiós.