proyecto CJ2 — Esp32 Devkit C V4 simulation

An interactive Esp32 Devkit C V4 circuit simulation you can run free in your browser on Velxio, by std2401043.

Components

Sketch code

#include <Wire.h>

// Dirección I2C del driver (0x0F)
#define MOTOR_DRIVER_ADDR 0x0F

#define MOTOR_SPEED_SET   0x82
#define DIRECTION_SET     0xAA

// Pines asignados según tu circuito visual
const int PIN_BOTON_VERDE = 18; // SIG1 (Cable verde)
const int PIN_BOTON_ROJO  = 5;  // SIG2 (Cable morado)

// Declaración de funciones
void ejecutarSecuenciaPrueba();
void enviarComandoMotor(uint8_t canal, uint8_t velocidad, bool sentidoHorario);
void detenerMotores();
bool verificarParoEmergencia(int milisegundosEspera);

void setup() {
  Serial.begin(115200);

  // Configuración de los pines del botón doble Grove
  pinMode(PIN_BOTON_VERDE, INPUT);
  pinMode(PIN_BOTON_ROJO, INPUT);

  // Inicialización de I2C en pines ESP32 (SDA = 21, SCL = 22)
  Wire.begin(21, 22);
  delay(500);

  Serial.println("--- CIRCUITO LISTO EN ESPERA DEL BOTÓN GROVE ---");
  detenerMotores();
}

void loop() {
  // El circuito se queda esperando a que presiones el Botón Verde
  if (digitalRead(PIN_BOTON_VERDE) == HIGH) {
    Serial.println("-> Botón Verde presionado: Iniciando secuencia de motores...");
    ejecutarSecuenciaPrueba();
    Serial.println("-> Secuencia finalizada. Esperando nueva pulsación...");
    delay(500); // Antirrebote al terminar
  }

  // Si presionas el botón rojo estando en reposo, asegura el apagado
  if (digitalRead(PIN_BOTON_ROJO) == HIGH) {
    detenerMotores();
  }
}

/**
 * Ejecuta exactamente la secuencia que enviaste en tu código,
 * comprobando en cada paso si se pulsa el botón rojo para detenerse.
 */
void ejecutarSecuenciaPrueba() {
  // 1. Probar Canal M1 (Motor Superior Izquierdo)
  Serial.println("1. Probando Canal M1 (Superior Izquierdo)...");
  enviarComandoMotor(1, 180, true);
  if (verificarParoEmergencia(2000)) return;
  detenerMotores();
  if (verificarParoEmergencia(1000)) return;

  // 2. Probar Canal M2 (Motor Inferior Izquierdo)
  Serial.println("2. Probando Canal M2 (Inferior Izquierdo)...");
  enviarComandoMotor(2, 180, true);
  if (verificarParoEmergencia(2000)) return;
  detenerMotores();
  if (verificarParoEmergencia(1000)) return;

  // 3. Probar Canal M1 en sentido inverso
  Serial.println("3. Probando Canal M1 (Sentido Inverso)...");
  enviarComandoMotor(1, 180, false);
  if (verificarParoEmergencia(2000)) return;
  detenerMotores();
  if (verificarParoEmergencia(1000)) return;

  // 4. Probar Canal M2 en sentido inverso
  Serial.println("4. Probando Canal M2 (Sentido Inverso)...");
  enviarComandoMotor(2, 180, false);
  if (verificarParoEmergencia(2000)) return;
  detenerMotores();
}

/**
 * Función para probar canales individuales del driver I2C
 */
void enviarComandoMotor(uint8_t canal, uint8_t velocidad, bool sentidoHorario) {
  uint8_t m1_speed = (canal == 1) ? velocidad : 0;
  uint8_t m2_speed = (canal == 2) ? velocidad : 0;

  // Setear velocidades
  Wire.beginTransmission(MOTOR_DRIVER_ADDR);
  Wire.write(MOTOR_SPEED_SET);
  Wire.write(m1_speed);
  Wire.write(m2_speed);
  Wire.endTransmission();

  delay(2);

  // 

More projects by std2401043