Chat

Welcome to Flux

Treat Flux like your intern. Tell it what you'd like to build and it'll get to work. You can also ask it questions, brainstorm ideas, and teach it your preferences. Learn More

Explain project
Write a project description
Find schematic issues
Create a test plan

Ready.


como conectar un Bluetooth HC-06 en una protoboar con Arduino mega

@copilot como conectar un Bluetooth HC-06 en una protoboar con Arduino mega
1y
Para conectar un módulo Bluetooth HC06HC-06 a un Arduino Mega, puedes seguir estos pasos:
Conexiones
  • HC-06:VCC a Arduino Mega:5V: Suministra la energía necesaria al módulo Bluetooth.
  • HC-06:GND a Arduino Mega:GND: Completa el circuito de energía.
  • HC-06:TXD a Arduino Mega:RX1 (Pin 19): Permite que el módulo Bluetooth envíe datos al Arduino.
  • HC-06:RXD a Arduino Mega:TX1 (Pin 18): Permite que el Arduino envíe datos al módulo Bluetooth.
Notas
  • Asegúrate de que el módulo HC-06 esté funcionando a 5V. Algunos módulos pueden requerir un divisor de voltaje o un adaptador de nivel lógico para el pin RX del HC-06, ya que está diseñado para 3.3V. Sin embargo, muchos usuarios lo conectan directamente al pin TX del Arduino sin problemas.
  • En el código del Arduino, utiliza el puerto serial correspondiente (por ejemplo, Serial1 para los pines 18 y 19 en el Mega) para comunicarte con el HC-06.
¿Te gustaría ayuda con el código de ejemplo?
1y
@copilot como conectar un Bluetooth HC-06 en un protoboar para que prenda un led como señal con Arduino mega
1y
Para conectar un módulo Bluetooth HC-06 a un Arduino Mega y controlar un LED, puedes seguir estos pasos:
Conexiones
  1. Módulo Bluetooth HC-06:
    • HC-06:VCC a Arduino Mega:5V: Alimenta el módulo Bluetooth.
    • HC-06:GND a Arduino Mega:GND: Completa el circuito de energía.
    • HC-06:TXD a Arduino Mega:RX1 (Pin 19): Para recibir datos.
    • HC-06:RXD a Arduino Mega:TX1 (Pin 18): Para enviar datos. (Considera un divisor de voltaje si es necesario).
  2. LED:
    • Conecta el ánodo (+) del LED a Arduino Mega:Pin digital 13 (o el que prefieras usar).
    • Conecta el cátodo (-) del LED a GND a través de una resistencia (por ejemplo, 220 ohmios) para limitar la corriente.
Código de Ejemplo
Aquí tienes un ejemplo de código que enciende un LED cuando el Arduino recibe el carácter '1' a través del módulo Bluetooth y lo apaga cuando recibe '0'.

Cpp


void setup() {
  Serial1.begin(9600); // Inicializa la comunicación serial con el módulo Bluetooth
  pinMode(13, OUTPUT); // Configura el pin 13 como salida para el LED
}

void loop() {
  if (Serial1.available()) { // Verifica si hay datos disponibles en el puerto serial
    char data = Serial1.read(); // Lee el dato recibido
    if (data == '1') {
      digitalWrite(13, HIGH); // Enciende el LED
    } else if (data == '0') {
      digitalWrite(13, LOW);  // Apaga el LED
    }
  }
}
Notas
  • Asegúrate de que el módulo Bluetooth esté configurado para comunicarse a la misma velocidad de baudios que usas en el Arduino (9600 en este caso).
  • Puedes utilizar cualquier aplicación de terminal Bluetooth en tu teléfono para enviar los caracteres '1' y '0' al Arduino Mega.
¿Hay algo más en lo que pueda ayudarte?
1y
@copilot hazme un circuito para arduino uno y un Bluetooth HC-06 sobre unas direccionales indicando que vas para la izquierda o para la derecha con botones
1y
Para crear un circuito que controle luces direccionales utilizando un Arduino Uno, un módulo Bluetooth HC-06, y dos botones (para indicar izquierda y derecha), podemos seguir este diseño general:
Componentes Necesarios
  • Arduino Uno
  • Módulo Bluetooth HC-06
  • 2 LEDs (uno para cada direccional)
  • 2 resistencias para los LEDs (220 ohmios es un buen valor)
  • 2 botones pulsadores
  • 2 resistencias pull-down para los botones (10k ohmios)
  • Cables de conexión
  • Protoboard
Conexiones
  1. Módulo Bluetooth HC-06:
    • HC-06:VCC a Arduino Uno:5V
    • HC-06:GND a Arduino Uno:GND
    • HC-06:TXD a Arduino Uno:RX (Pin 0)
    • HC-06:RXD a Arduino Uno:TX (Pin 1) (utiliza un divisor de voltaje si es necesario).
  2. LEDs:
    • LED para izquierda:
      • Ánodo: Conectar a Arduino Uno:Pin digital 8
      • Cátodo: Conectar a GND a través de una resistencia de 220 ohmios
    • LED para derecha:
      • Ánodo: Conectar a Arduino Uno:Pin digital 9
      • Cátodo: Conectar a GND a través de una resistencia de 220 ohmios
  3. Botones:
    • Botón para izquierda:
      • Un extremo a Arduino Uno:Pin digital 2
      • Otro extremo a GND a través de una resistencia de 10k ohmios (resistencia pull-down)
    • Botón para derecha:
      • Un extremo a Arduino Uno:Pin digital 3
      • Otro extremo a GND a través de una resistencia de 10k ohmios (resistencia pull-down)
Código de Ejemplo
Aquí tienes un ejemplo de código que enciende un LED al presionar un botón y envía una señal a través del módulo Bluetooth.

Cpp


void setup() {
  Serial.begin(9600); // Inicializa la comunicación serial
  pinMode(2, INPUT);  // Configura el pin 2 como entrada (botón izquierda)
  pinMode(3, INPUT);  // Configura el pin 3 como entrada (botón derecha)
  pinMode(8, OUTPUT); // Configura el pin 8 como salida (LED izquierda)
  pinMode(9, OUTPUT); // Configura el pin 9 como salida (LED derecha)
}

void loop() {
  int leftButtonState = digitalRead(2);
  int rightButtonState = digitalRead(3);

  if (leftButtonState == HIGH) {
    digitalWrite(8, HIGH); // Enciende el LED izquierda
    Serial.println("L");   // Envía 'L' por Bluetooth
  } else {
    digitalWrite(8, LOW);  // Apaga el LED izquierda
  }

  if (rightButtonState == HIGH) {
    digitalWrite(9, HIGH); // Enciende el LED derecha
    Serial.println("R");   // Envía 'R' por Bluetooth
  } else {
    digitalWrite(9, LOW);  // Apaga el LED derecha
  }

  delay(100); // Pequeño retraso para estabilidad
}
Este código enciende el LED correspondiente cuando el botón está presionado y envía un carácter por el puerto serial. ¿Necesitas algún ajuste o explicación adicional sobre este circuito?
1y
@copilot dame el diagrama de los componentes
1y
Claro, puedo crear un diagrama para representar el circuito con un Arduino Uno, un módulo Bluetooth HC-06, botones, y LEDs para direccionales. Vamos a usar el lenguaje de diagramación Mermaid para mostrar las conexiones:

Mermaid


graph TB
    subgraph Arduino_Uno
        A0(($A0$))
        A1(($A1$))
        A2(($A2$))
        A3(($A3$))
        A4(($A4$))
        A5(($A5$))
        D2(($D2$)) --> B1[[Botón Izquierda]]
        D3(($D3$)) --> B2[[Botón Derecha]]
        D8(($D8$)) --> L1[[LED Izquierda]]
        D9(($D9$)) --> L2[[LED Derecha]]
        VCC(($5V$)) --> HC06VCC((HC-06 VCC))
        GND(($GND$)) --> HC06GND((HC-06 GND))
        RX(($RX, D0$)) --> HC06TX((HC-06 TXD))
        TX(($TX, D1$)) --> HC06RX((HC-06 RXD))
    end

    subgraph BD --> Botón Izquierda
        R1[[10kΩ]] -->|GND| GND
    end

    subgraph BD --> Botón Derecha
        R2[[10kΩ]] -->|GND| GND
    end

    subgraph LD --> LED Izquierda
        R3[[220Ω]] -->|GND| GND
    end

    subgraph LD --> LED Derecha
        R4[[220Ω]] -->|GND| GND
    end
Descripción:
  • Arduino Uno: Es el controlador principal del sistema.
  • Módulo HC-06: Se conecta a los pines de 5V, GND, RX y TX del Arduino para permitir la comunicación Bluetooth.
  • Botones: Uno para la señal de giro a la izquierda conectado al pin digital 2 y otro para la derecha conectado al pin digital 3, ambos con resistencias pull-down de 10kΩ.
  • LEDs: El LED de la izquierda está conectado al pin digital 8 y el de la derecha al pin digital 9, cada uno con una resistencia limitadora de corriente de 220Ω hacia GND.
Si necesitas más ajustes o tienes alguna pregunta sobre el diagrama, házmelo saber.
1y
@copilot // declaramos los leds int led1 = 2; int led2 = 3; int led3 = 4; int led4 = 5; int led5 = 6; int led6 = 7; int led7 = 8; int led8 = 9; int led9 = 10; int led10 = 11;
// declaramos los pulsadores de las dirrecionales int pul_izq = A0; int pul_par = A1; int pul_der = A2;
// declarar el estado de los pulsadores int dir_izq = 0; int dir_der = 0; int dir_par = 0;
// El tiempo int tiempo=200;
void setup() { //crear un contador que esta los pin for(int i=0;i<10;i++){ } // los pulsadores son de entrada pinMode(pul_izq,INPUT); pinMode(pul_der,INPUT); pinMode(pul_par,INPUT);
pinMode(2,OUTPUT); pinMode(3,OUTPUT); pinMode(4,OUTPUT); pinMode(5,OUTPUT); pinMode(6,OUTPUT); pinMode(7,OUTPUT); pinMode(8,OUTPUT); pinMode(9,OUTPUT); pinMode(10,OUTPUT); pinMode(11,OUTPUT);
} void loop() { //cuando entra el voltaje a los pulsadores estara encendido o 1
dir_izq = digitalRead (pul_izq); dir_der = digitalRead (pul_der); dir_par = digitalRead (pul_par);
//si esta presionado el pulsador izquierdo realizar este proceso if (dir_izq == HIGH){ digitalWrite(led3, HIGH); digitalWrite(led6, HIGH); digitalWrite(led10, HIGH); delay(tiempo); digitalWrite(led3, LOW); digitalWrite(led6, LOW); digitalWrite(led10, LOW); delay(tiempo); digitalWrite(led2, HIGH); digitalWrite(led5, HIGH); digitalWrite(led9, HIGH); delay(tiempo); digitalWrite(led2, LOW); digitalWrite(led5, LOW); digitalWrite(led9, LOW); delay(tiempo); digitalWrite(led1, HIGH); digitalWrite(led4, HIGH); digitalWrite(led8, HIGH); delay(tiempo);
digitalWrite(led1, LOW); digitalWrite(led4, LOW); digitalWrite(led8, LOW); } //si esta presionado el pulsador derecho realizar este proceso if (dir_der== HIGH){ digitalWrite(led1, HIGH); digitalWrite(led5, HIGH); digitalWrite(led8, HIGH); delay(tiempo); digitalWrite(led1, LOW); digitalWrite(led5, LOW); digitalWrite(led8, LOW); delay(tiempo); digitalWrite(led2, HIGH); digitalWrite(led6, HIGH); digitalWrite(led9, HIGH); delay(tiempo); digitalWrite(led2, LOW); digitalWrite(led6, LOW); digitalWrite(led9, LOW); delay(tiempo); digitalWrite(led3, HIGH); digitalWrite(led7, HIGH); digitalWrite(led10, HIGH); delay(tiempo);
digitalWrite(led3, LOW); digitalWrite(led7, LOW); digitalWrite(led10, LOW); } //si esta presionado el pulsador parqueo realizar este proceso if (dir_par == HIGH){ digitalWrite(led1, HIGH); digitalWrite(led2, HIGH); digitalWrite(led3, HIGH); digitalWrite(led4, HIGH); digitalWrite(led5, HIGH); digitalWrite(led6, HIGH); digitalWrite(led7, HIGH); digitalWrite(led8, HIGH); digitalWrite(led9, HIGH); digitalWrite(led10, HIGH); delay(tiempo); digitalWrite(led1, LOW); digitalWrite(led2, LOW); digitalWrite(led3, LOW); digitalWrite(led4, LOW); digitalWrite(led5, LOW); digitalWrite(led6, LOW); digitalWrite(led7, LOW); digitalWrite(led8, LOW); digitalWrite(led9, LOW);
digitalWrite(led10, LOW); delay(tiempo); } } De este código configurarlo para un Bluetooth HC-06
1y
Para configurar el código de tu proyecto actual para que funcione con un módulo Bluetooth HC-06, necesitarás modificarlo para incluir una comunicación serial que reciba comandos a través del módulo Bluetooth. Supongamos que el HC-06 estará esperando comandos para activar las luces direccionales ("L" para izquierda, "R" para derecha, y "P" para parqueo) que se enviarán desde un dispositivo Bluetooth emparejado.
Aquí te muestro cómo puedes integrar esto:

Cpp


// Declaramos los LEDs
int led1 = 2;
int led2 = 3;
int led3 = 4;
int led4 = 5;
int led5 = 6;
int led6 = 7;
int led7 = 8;
int led8 = 9;
int led9 = 10;
int led10 = 11;

// Declaramos los pulsadores de las direccionales
int pul_izq = A0;
int pul_par = A1;
int pul_der = A2;

// Declaro el estado de las direccionales (iniciar apagados)
bool dir_izq = false;
bool dir_der = false;
bool dir_par = false;

// El tiempo
int tiempo = 200;

void setup() {
  Serial.begin(9600); // Inicializa la comunicación serial para el módulo Bluetooth

  // Los pulsadores son de entrada
  pinMode(pul_izq, INPUT);
  pinMode(pul_der, INPUT);
  pinMode(pul_par, INPUT);

  // Configurar los pines de los LEDs como salida
  for (int i = 2; i <= 11; i++) {
    pinMode(i, OUTPUT);
  }
}

void loop() {
  // Leer el estado de los pulsadores
  dir_izq = digitalRead(pul_izq);
  dir_der = digitalRead(pul_der);
  dir_par = digitalRead(pul_par);

  // Leer comandos desde el módulo Bluetooth
  if (Serial.available()) {
    char command = Serial.read(); // Lee un único carácter
    if (command == 'L') {
      dir_izq = true;
      dir_der = false;
      dir_par = false;
    } else if (command == 'R') {
      dir_izq = false;
      dir_der = true;
      dir_par = false;
    } else if (command == 'P') {
      dir_izq = false;
      dir_der = false;
      dir_par = true;
    }
  }

  // Procesar la señal de la direccional izquierda
  if (dir_izq) {
    toggleLeds({led3, led6, led10});
    toggleLeds({led2, led5, led9});
    toggleLeds({led1, led4, led8});
  }

  // Procesar la señal de la direccional derecha
  if (dir_der) {
    toggleLeds({led1, led5, led8});
    toggleLeds({led2, led6, led9});
    toggleLeds({led3, led7, led10});
  }

  // Procesar la señal de parqueo
  if (dir_par) {
    toggleAllLeds();
  }
}

void toggleLeds(std::initializer_list leds) {
  for (int led : leds) {
    digitalWrite(led, HIGH);
  }
  delay(tiempo);
  for (int led : leds) {
    digitalWrite(led, LOW);
  }
  delay(tiempo);
}

void toggleAllLeds() {
  for (int i = 2; i <= 11; i++) {
    digitalWrite(i, HIGH);
  }
  delay(tiempo);
  for (int i = 2; i <= 11; i++) {
    digitalWrite(i, LOW);
  }
  delay(tiempo);
}
Descripción del código:
  • Bluetooth: Ahora está configurado para recibir caracteres 'L', 'R', y 'P' para encender las luces direccionales izquierda, derecha, y de parqueo respectivamente.
  • Pulsadores: Continúan funcionando como antes, puedes ejecutarlos manualmente.
  • Funciones toggleLeds y toggleAllLeds: Estas funciones facilitan alternar los LEDs en el patrón deseado.
Puedes enviar los caracteres apropiados desde cualquier aplicación de terminal Bluetooth en un dispositivo móvil para probar la funcionalidad. ¿Te gustaría ajustar algo más?
1y
Quita los pulsadores del código
1y
De acuerdo, eliminaré el código relacionado con los pulsadores y ajustaré el resto para que las direccionales se controlen exclusivamente a través del módulo Bluetooth HC-06. Aquí tienes la versión modificada:

Cpp


// Declaramos los LEDs
int led1 = 2;
int led2 = 3;
int led3 = 4;
int led4 = 5;
int led5 = 6;
int led6 = 7;
int led7 = 8;
int led8 = 9;
int led9 = 10;
int led10 = 11;

// El estado de las direccionales
bool dir_izq = false;
bool dir_der = false;
bool dir_par = false;

// El tiempo
int tiempo = 200;

void setup() {
  Serial.begin(9600); // Inicializa la comunicación serial para el módulo Bluetooth

  // Configurar los pines de los LEDs como salida
  for (int i = 2; i <= 11; i++) {
    pinMode(i, OUTPUT);
  }
}

void loop() {
  // Leer comandos desde el módulo Bluetooth
  if (Serial.available()) {
    char command = Serial.read(); // Lee un único carácter
    if (command == 'L') {
      dir_izq = true;
      dir_der = false;
      dir_par = false;
    } else if (command == 'R') {
      dir_izq = false;
      dir_der = true;
      dir_par = false;
    } else if (command == 'P') {
      dir_izq = false;
      dir_der = false;
      dir_par = true;
    }
  }

  // Procesar la señal de la direccional izquierda
  if (dir_izq) {
    toggleLeds({led3, led6, led10});
    toggleLeds({led2, led5, led9});
    toggleLeds({led1, led4, led8});
  }

  // Procesar la señal de la direccional derecha
  if (dir_der) {
    toggleLeds({led1, led5, led8});
    toggleLeds({led2, led6, led9});
    toggleLeds({led3, led7, led10});
  }

  // Procesar la señal de parqueo
  if (dir_par) {
    toggleAllLeds();
  }
}

void toggleLeds(std::initializer_list leds) {
  for (int led : leds) {
    digitalWrite(led, HIGH);
  }
  delay(tiempo);
  for (int led : leds) {
    digitalWrite(led, LOW);
  }
  delay(tiempo);
}

void toggleAllLeds() {
  for (int i = 2; i <= 11; i++) {
    digitalWrite(i, HIGH);
  }
  delay(tiempo);
  for (int i = 2; i <= 11; i++) {
    digitalWrite(i, LOW);
  }
  delay(tiempo);
}
Descripción:
  • Control mediante Bluetooth: Los caracteres 'L' (izquierda), 'R' (derecha), y 'P' (parqueo) se reciben a través del módulo Bluetooth y controlan los LEDs conforme a ellos.
  • Eliminación de pulsadores: Todos los elementos relacionados con los pulsadores han sido eliminados del código para que la operación se base completamente en los comandos recibidos vía Bluetooth.
Ahora el sistema es completamente controlado por señales Bluetooth. Si necesitas más cambios, házmelo saber.
1y
@copilot // Declaramos los LEDs int led1 = 2; int led2 = 3; int led3 = 4; int led4 = 5; int led5 = 6; int led6 = 7; int led7 = 8; int led8 = 9; int led9 = 10; int led10 = 11;
// Declaramos el estado de las señales char comando; // Variable para almacenar el comando recibido por Bluetooth int tiempo = 200;
void setup() { // Configurar los pines de los LEDs como salida pinMode(led1, OUTPUT); pinMode(led2, OUTPUT); pinMode(led3, OUTPUT); pinMode(led4, OUTPUT); pinMode(led5, OUTPUT); pinMode(led6, OUTPUT); pinMode(led7, OUTPUT); pinMode(led8, OUTPUT); pinMode(led9, OUTPUT); pinMode(led10, OUTPUT);
// Inicializamos la comunicación serial para el HC-06 Serial.begin(9600); }
void loop() { // Verificamos si hay datos disponibles en el Bluetooth if (Serial.available() > 0) { comando = Serial.read(); // Leer el comando recibido
// Realizar acción según el comando
switch (comando) {
  case 'L': // Señal izquierda
    senalIzquierda();
    break;
  case 'R': // Señal derecha
    senalDerecha();
    break;
  case 'P': // Señal de parqueo
    senalParqueo();
    break;
  case 'O': // Apagar todas las luces
    apagarLuces();
    break;
  default:
    // Comando desconocido
    break;
}
} }
void senalIzquierda() { digitalWrite(led3, HIGH); digitalWrite(led6, HIGH); digitalWrite(led10, HIGH); delay(tiempo); digitalWrite(led3, LOW); digitalWrite(led6, LOW); digitalWrite(led10, LOW); delay(tiempo); digitalWrite(led2, HIGH); digitalWrite(led5, HIGH); digitalWrite(led9, HIGH); delay(tiempo); digitalWrite(led2, LOW); digitalWrite(led5, LOW); digitalWrite(led9, LOW); delay(tiempo); digitalWrite(led1, HIGH); digitalWrite(led4, HIGH); digitalWrite(led8, HIGH); delay(tiempo); digitalWrite(led1, LOW); digitalWrite(led4, LOW); digitalWrite(led8, LOW); }
void senalDerecha() { digitalWrite(led1, HIGH); digitalWrite(led5, HIGH); digitalWrite(led8, HIGH); delay(tiempo); digitalWrite(led1, LOW); digitalWrite(led5, LOW); digitalWrite(led8, LOW); delay(tiempo); digitalWrite(led2, HIGH); digitalWrite(led6, HIGH); digitalWrite(led9, HIGH); delay(tiempo); digitalWrite(led2, LOW); digitalWrite(led6, LOW); digitalWrite(led9, LOW); delay(tiempo); digitalWrite(led3, HIGH); digitalWrite(led7, HIGH); digitalWrite(led10, HIGH); delay(tiempo); digitalWrite(led3, LOW); digitalWrite(led7, LOW); digitalWrite(led10, LOW); }
void senalParqueo() { for (int i = led1; i <= led10; i++) { digitalWrite(i, HIGH); } delay(tiempo); for (int i = led1; i <= led10; i++) { digitalWrite(i, LOW); } delay(tiempo); }
void apagarLuces() { for (int i = led1; i <= led10; i++) { digitalWrite(i, LOW); } } Corrige si algo está mal, ya que quiero que el código solo esté relacionado con el Bluetooth HC-06
1y
Tu código parece estar bastante bien estructurado para controlar los LEDs mediante comandos enviados por un módulo Bluetooth HC-06. Haré una revisión y algunos ajustes menores para garantizar que todo funcione correctamente:
Código corregido y comentado

Cpp


// Declaramos los LEDs
int led1 = 2;
int led2 = 3;
int led3 = 4;
int led4 = 5;
int led5 = 6;
int led6 = 7;
int led7 = 8;
int led8 = 9;
int led9 = 10;
int led10 = 11;

// Declaramos el estado de las señales
char comando; // Variable para almacenar el comando recibido por Bluetooth
int tiempo = 200;

void setup() {
  // Configurar los pines de los LEDs como salida
  for (int i = led1; i <= led10; i++) {
    pinMode(i, OUTPUT);
  }

  // Inicializamos la comunicación serial para el HC-06
  Serial.begin(9600);
}

void loop() {
  // Verificamos si hay datos disponibles en el Bluetooth
  if (Serial.available() > 0) {
    comando = Serial.read(); // Leer el comando recibido

    // Realizar acción según el comando
    switch (comando) {
      case 'L': 
        senalIzquierda();
        break;
      case 'R': 
        senalDerecha();
        break;
      case 'P': 
        senalParqueo();
        break;
      case 'O': // Apagar todas las luces
        apagarLuces();
        break;
      default:
        // Comando desconocido
        break;
    }
  }
}

void senalIzquierda() {
  digitalWrite(led3, HIGH);
  digitalWrite(led6, HIGH);
  digitalWrite(led10, HIGH);
  delay(tiempo);
  digitalWrite(led3, LOW);
  digitalWrite(led6, LOW);
  digitalWrite(led10, LOW);
  delay(tiempo);
  digitalWrite(led2, HIGH);
  digitalWrite(led5, HIGH);
  digitalWrite(led9, HIGH);
  delay(tiempo);
  digitalWrite(led2, LOW);
  digitalWrite(led5, LOW);
  digitalWrite(led9, LOW);
  delay(tiempo);
  digitalWrite(led1, HIGH);
  digitalWrite(led4, HIGH);
  digitalWrite(led8, HIGH);
  delay(tiempo);
  digitalWrite(led1, LOW);
  digitalWrite(led4, LOW);
  digitalWrite(led8, LOW);
}

void senalDerecha() {
  digitalWrite(led1, HIGH);
  digitalWrite(led5, HIGH);
  digitalWrite(led8, HIGH);
  delay(tiempo);
  digitalWrite(led1, LOW);
  digitalWrite(led5, LOW);
  digitalWrite(led8, LOW);
  delay(tiempo);
  digitalWrite(led2, HIGH);
  digitalWrite(led6, HIGH);
  digitalWrite(led9, HIGH);
  delay(tiempo);
  digitalWrite(led2, LOW);
  digitalWrite(led6, LOW);
  digitalWrite(led9, LOW);
  delay(tiempo);
  digitalWrite(led3, HIGH);
  digitalWrite(led7, HIGH);
  digitalWrite(led10, HIGH);
  delay(tiempo);
  digitalWrite(led3, LOW);
  digitalWrite(led7, LOW);
  digitalWrite(led10, LOW);
}

void senalParqueo() {
  for (int i = led1; i <= led10; i++) {
    digitalWrite(i, HIGH);
  }
  delay(tiempo);
  for (int i = led1; i <= led10; i++) {
    digitalWrite(i, LOW);
  }
  delay(tiempo);
}

void apagarLuces() {
  for (int i = led1; i <= led10; i++) {
    digitalWrite(i, LOW);
  }
}
Explicaciones:
  • Configuración inicial: Los pines se configuran como salidas mediante un bucle for, lo cual es más compacto.
  • Recepción de comandos: La comunicación serial se utiliza para recibir comandos específicos ('L', 'R', 'P', 'O').
  • Funciones dedicadas: Las funciones senalIzquierda, senalDerecha, senalParqueo y apagarLuces manejan las acciones correspondientes.
Tu código ahora se centra exclusivamente en recibir instrucciones del módulo Bluetooth para controlar los LEDs según los comandos especificados. Si necesitas agregar o cambiar algo, házmelo saber.
1y
@copilot ayudame a hacer un círcuito para intermitentes o direccionales para un proyecto de carro con Arduino mega, que cuando presione el botón de la izquierda, prendan los leds de la izquierda, cuando presione el botón de la derecha, prendan otros leds de la derecha, y si el carro frena (presionando el botón de en medio) otros leds prendan, cada uno con sus respectivos leds, y que los leds tengan una secuencia
11mo
Para diseñar un circuito para un carro que controle las luces direccionales izquierda y derecha, así como las luces de freno utilizando un Arduino Mega, necesitarás los siguientes componentes:
Componentes Necesarios
  • Arduino Mega
  • 6 LEDs (2 para cada direccional y 2 para freno)
  • 6 resistencias (220 ohmios para limitar la corriente de los LEDs)
  • 3 botones pulsadores
  • 3 resistencias pull-down (10k ohmios para los botones)
  • Cables de conexión
  • Protoboard
Conexiones de Hardware
  1. Direccionales Izquierda:
    • LEDs conectados a pines digitales 8 y 9.
    • Botón conectado al pin digital 2.
  2. Direccionales Derecha:
    • LEDs conectados a pines digitales 10 y 11.
    • Botón conectado al pin digital 3.
  3. Luces de Freno:
    • LEDs conectados a pines digitales 12 y 13.
    • Botón conectado al pin digital 4.
Conexiones Detalladas
  • Cada LED necesita estar en serie con una resistencia de 220 ohmios, con el cátodo del LED conectado a GND.
  • Cada botón de entrada necesita conectarse a GND a través de una resistencia de 10k ohmios (resistencia pull-down).
Código Ejemplo
Aquí tienes un ejemplo para implementar el comportamiento de las luces:

Cpp


// Pines para los LEDs
int ledsIzq[] = {8, 9};
int ledsDer[] = {10, 11};
int ledsFreno[] = {12, 13};

// Pines para los botones
int botonIzq = 2;
int botonDer = 3;
int botonFreno = 4;

// Tiempo de retardo para la secuencia
int tiempo = 200;

void setup() {
  // Configuración de pines para LEDs como salida
  for (int i = 0; i < 2; i++) {
    pinMode(ledsIzq[i], OUTPUT);
    pinMode(ledsDer[i], OUTPUT);
    pinMode(ledsFreno[i], OUTPUT);
  }

  // Configuración de pines para botones como entrada
  pinMode(botonIzq, INPUT);
  pinMode(botonDer, INPUT);
  pinMode(botonFreno, INPUT);
}

void loop() {
  // Leer el estado de los botones
  bool estadoIzq = digitalRead(botonIzq);
  bool estadoDer = digitalRead(botonDer);
  bool estadoFreno = digitalRead(botonFreno);

  // Secuencia de intermitentes izquierda
  if (estadoIzq) {
    for (int i = 0; i < 2; i++) {
      digitalWrite(ledsIzq[i], HIGH);
      delay(tiempo);
      digitalWrite(ledsIzq[i], LOW);
    }
  }

  // Secuencia de intermitentes derecha
  if (estadoDer) {
    for (int i = 0; i < 2; i++) {
      digitalWrite(ledsDer[i], HIGH);
      delay(tiempo);
      digitalWrite(ledsDer[i], LOW);
    }
  }

  // Luz de freno encendida
  if (estadoFreno) {
    for (int i = 0; i < 2; i++) {
      digitalWrite(ledsFreno[i], HIGH);
    }
  } else {
    for (int i = 0; i < 2; i++) {
      digitalWrite(ledsFreno[i], LOW);
    }
  }
}
Descripción:
  • Intermitentes: Los LEDs parpadean en secuencia cuando se presionan los botones correspondientes a las direccionales izquierda o derecha.
  • Luces de Freno: Se encienden continuamente cuando se presiona el botón de freno.
Este código configura un sistema básico para el control de luces direccionales y de freno. Los botones se leen directamente, y el estado HIGH les indica estar presionados. Si necesitas ajustes o un diseño más avanzado, avísame.
11mo
@copilot muéstrame el diagrama
11mo
Creo que representaré el diagrama en una forma sencilla usando Mermaid para mostrar las conexiones de los LEDs y botones al Arduino Mega:

Image


LEDs
Arduino_Mega
D2
D3
D4
LED_Izq
LED_Izq
LED_Der
LED_Der
LED_Freno
LED_Freno
Resistencia node_10k
Resistencia node_10k
Resistencia node_10k
Resistencia 220Ω
Resistencia 220Ω
Resistencia 220Ω
Resistencia 220Ω
Resistencia 220Ω
Resistencia 220Ω
GND1$GND$
GND2$GND$
GND3$GND$
GND4$GND$
GND5$GND$
GND6$GND$
MEGA_Pin_2
Botón Izquierda
MEGA_Pin_3
Botón Derecha
MEGA_Pin_4
Botón Freno
LED_Izquierda_1
MEGA_Pin_8
LED_Izquierda_2
MEGA_Pin_9
LED_Derecha_1
MEGA_Pin_10
LED_Derecha_2
MEGA_Pin_11
LED_Freno_1
MEGA_Pin_12
LED_Freno_2
MEGA_Pin_13
Botón VCC
VCC$5V$
Botón VCC
Botón VCC
Botón GND
GND
Botón GND
Botón GND
Botones
Descripción del Diagrama:
  • Arduino Mega: Tiene las conexiones de los botones a los pines 2, 3 y 4, y las conexiones de los LEDs a los pines 8, 9, 10, 11, 12, y 13.
  • Botones: Cada botón está conectado a GND a través de una resistencia de 10kΩ (resistencia pull-down) para leer su estado.
  • LEDs: Cada LED está conectado a través de una resistencia de 220Ω a GND y controlado por un pin digital del Arduino.
Este diagrama es una representación simplificada de las conexiones necesarias. Si necesitas más detalles o ajustes, házmelo saber.
11mo
Parece que tu mensaje estaba vacío. Si necesitas más información o tienes alguna pregunta sobre el proyecto de las luces direccionales, los circuitos, o cualquier otra cosa relacionada con tu diseño, por favor házmelo saber. Estoy aquí para ayudarte.
11mo
@copilot Nuevo código
#define IN1 5 #define IN2 6 #define IN3 9 #define IN4 10
void setup() { pinMode(IN1, OUTPUT); pinMode(IN2, OUTPUT); pinMode(IN3, OUTPUT); pinMode(IN4, OUTPUT); Serial.begin(9600); // Velocidad del módulo Bluetooth }
void loop() { if (Serial.available()) { char command = Serial.read(); switch (command) { case 'U': // Adelante digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW); digitalWrite(IN3, HIGH); digitalWrite(IN4, LOW); break; case 'D': // Atrás digitalWrite(IN1, LOW); digitalWrite(IN2, HIGH); digitalWrite(IN3, LOW); digitalWrite(IN4, HIGH); break; case 'L': // Izquierda digitalWrite(IN1, LOW); digitalWrite(IN2, LOW); digitalWrite(IN3, HIGH); digitalWrite(IN4, LOW); break; case 'R': // Derecha digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW); digitalWrite(IN3, LOW); digitalWrite(IN4, LOW); break; case 'Y': // Stop digitalWrite(IN1, LOW); digitalWrite(IN2, LOW); digitalWrite(IN3, LOW); digitalWrite(IN4, LOW); break; } } }
Este código juntalo con el siguiente que son intermitentes, los leds de freno configuralo con "Y" hasta que apretemos otro comando para avanzar se apagan, mientras se mantienen prendidos en el mismo freno
Los leds de izquierda configuralo al comando de "A" Y los leds de derecha configuralo al comando "O" Para cuando apretemos ese botón prendan, pero no muevas nada del primer código que es la movilidad del carro.
const int btnIzq = 2; const int btnDer = 3; const int btnFreno = 4;
const int ledsIzq[] = {5, 6, 7, 8, 9, 10}; const int ledsDer[] = {11, 12, 13, 14, 15, 16}; const int ledsFreno[] = {17, 18, 19, 20};
void setup() { pinMode(btnIzq, INPUT_PULLUP); pinMode(btnDer, INPUT_PULLUP); pinMode(btnFreno, INPUT_PULLUP);
for (int i = 0; i < 6; i++) { pinMode(ledsIzq[i], OUTPUT); pinMode(ledsDer[i], OUTPUT); } for (int i = 0; i < 4; i++) { pinMode(ledsFreno[i], OUTPUT); }
}
void loop() { if (digitalRead(btnIzq) == HIGH) { secuenciaIntermitente(ledsIzq, 6); } if (digitalRead(btnDer) == HIGH) { secuenciaIntermitente(ledsDer, 6); } if (digitalRead(btnFreno) == LOW) { encenderFreno(); } else { apagarFreno(); } }
void secuenciaIntermitente(const int leds[], int cantidad) { for (int i = 0; i < cantidad; i++) { digitalWrite(leds[i], HIGH); delay(50); } delay(200); for (int i = 0; i < cantidad; i++) { digitalWrite(leds[i], LOW); delay(50); } }
void encenderFreno() { for (int i = 0; i < 4; i++) { digitalWrite(ledsFreno[i], LOW); } }
void apagarFreno() { for (int i = 0; i < 4; i++) { digitalWrite(ledsFreno[i], HIGH); } }
11mo
Para fusionar ambos fragmentos de código y ajustar las funciones de los LEDs según los comandos que especificaste, haremos algunos cambios. Mantendremos la lógica de movimiento del carro intacta y combinaremos el funcionamiento de los intermitentes y las luces de freno con los comandos adicionales 'A' para las luces de izquierda, 'O' para las luces de derecha, y 'Y' para las luces de freno.
Código Combinado

Cpp


// Configuración de pines para el movimiento del carro
#define IN1 5
#define IN2 6
#define IN3 9
#define IN4 10

// Configuración de pines para los LEDs
const int ledsIzq[] = {22, 23, 24, 25, 26, 27};  // Cambié los números de pins para no interferir con IN1-IN4
const int ledsDer[] = {28, 29, 30, 31, 32, 33};
const int ledsFreno[] = {34, 35, 36, 37};

void setup() {
  // Configuración de pines de salida para movimiento
  pinMode(IN1, OUTPUT);
  pinMode(IN2, OUTPUT);
  pinMode(IN3, OUTPUT);
  pinMode(IN4, OUTPUT);

  // Configuración de pines de salida para LEDs
  for (int i = 0; i < 6; i++) {
    pinMode(ledsIzq[i], OUTPUT);
    pinMode(ledsDer[i], OUTPUT);
  }
  for (int i = 0; i < 4; i++) {
    pinMode(ledsFreno[i], OUTPUT);
  }

  Serial.begin(9600); // Velocidad del módulo Bluetooth
}

void loop() {
  if (Serial.available()) {
    char command = Serial.read();

    switch (command) {
      // Movimiento del carro
      case 'U': // Adelante
        digitalWrite(IN1, HIGH);
        digitalWrite(IN2, LOW);
        digitalWrite(IN3, HIGH);
        digitalWrite(IN4, LOW);
        apagarFreno();
        break;
        
      case 'D': // Atrás
        digitalWrite(IN1, LOW);
        digitalWrite(IN2, HIGH);
        digitalWrite(IN3, LOW);
        digitalWrite(IN4, HIGH);
        apagarFreno();
        break;
        
      case 'L': // Izquierda
        digitalWrite(IN1, LOW);
        digitalWrite(IN2, LOW);
        digitalWrite(IN3, HIGH);
        digitalWrite(IN4, LOW);
        apagarFreno();
        break;
        
      case 'R': // Derecha
        digitalWrite(IN1, HIGH);
        digitalWrite(IN2, LOW);
        digitalWrite(IN3, LOW);
        digitalWrite(IN4, LOW);
        apagarFreno();
        break;
        
      case 'Y': // Stop y enciende luces de freno
        digitalWrite(IN1, LOW);
        digitalWrite(IN2, LOW);
        digitalWrite(IN3, LOW);
        digitalWrite(IN4, LOW);
        encenderFreno();
        break;
        
      // Lógica de LEDs
      case 'A': // Intermitentes izquierda
        secuenciaIntermitente(ledsIzq, 6);
        break;
        
      case 'O': // Intermitentes derecha
        secuenciaIntermitente(ledsDer, 6);
        break;
    }
  }
}

void secuenciaIntermitente(const int leds[], int cantidad) {
  for (int i = 0; i < cantidad; i++) {
    digitalWrite(leds[i], HIGH);
    delay(50);
  }
  delay(200);
  for (int i = 0; i < cantidad; i++) {
    digitalWrite(leds[i], LOW);
    delay(50);
  }
}

void encenderFreno() {
  for (int i = 0; i < 4; i++) {
    digitalWrite(ledsFreno[i], HIGH); // Activa las luces de freno
  }
}

void apagarFreno() {
  for (int i = 0; i < 4; i++) {
    digitalWrite(ledsFreno[i], LOW); // Apaga las luces de freno
  }
}
Notas:
  • Pins de LEDs: Asegúrate de que los pines usados para los LEDs (22-37 en este código) no interfieran con los pines IN1-IN4 para la movilidad.
  • Comandos adicionales: 'A' para intermitentes izquierda y 'O' para intermitentes derecha añaden capacidad de control a través del Bluetooth.
  • Luces de freno: Se encienden al recibir el comando 'Y', permaneciendo encendidas hasta que se reciba un nuevo comando de movimiento.
Si hay algo específico que necesitas cambiar o ajustar en el código, házmelo saber y puedo ayudarte con eso.
11mo
// Configuración de pines para el movimiento del carro #define IN1 5 #define IN2 6 #define IN3 9 #define IN4 10
// Configuración de pines para los LEDs const int ledsIzq[] = {22, 23, 24, 25, 26, 27}; // Cambié los números de pins para no interferir con IN1-IN4 const int ledsDer[] = {28, 29, 30, 31, 32, 33}; const int ledsFreno[] = {34, 35, 36, 37};
void setup() { // Configuración de pines de salida para movimiento pinMode(IN1, OUTPUT); pinMode(IN2, OUTPUT); pinMode(IN3, OUTPUT); pinMode(IN4, OUTPUT);
// Configuración de pines de salida para LEDs for (int i = 0; i < 6; i++) { pinMode(ledsIzq[i], OUTPUT); pinMode(ledsDer[i], OUTPUT); } for (int i = 0; i < 4; i++) { pinMode(ledsFreno[i], OUTPUT); }
Serial.begin(9600); // Velocidad del módulo Bluetooth }
void loop() { if (Serial.available()) { char command = Serial.read();
switch (command) {
  // Movimiento del carro
  case 'U': // Adelante
    digitalWrite(IN1, HIGH);
    digitalWrite(IN2, LOW);
    digitalWrite(IN3, HIGH);
    digitalWrite(IN4, LOW);
    apagarFreno();
    break;
    
  case 'D': // Atrás
    digitalWrite(IN1, LOW);
    digitalWrite(IN2, HIGH);
    digitalWrite(IN3, LOW);
    digitalWrite(IN4, HIGH);
    apagarFreno();
    break;
    
  case 'L': // Izquierda
    digitalWrite(IN1, LOW);
    digitalWrite(IN2, LOW);
    digitalWrite(IN3, HIGH);
    digitalWrite(IN4, LOW);
    apagarFreno();
    break;
    
  case 'R': // Derecha
    digitalWrite(IN1, HIGH);
    digitalWrite(IN2, LOW);
    digitalWrite(IN3, LOW);
    digitalWrite(IN4, LOW);
    apagarFreno();
    break;
    
  case 'Y': // Stop y enciende luces de freno
    digitalWrite(IN1, LOW);
    digitalWrite(IN2, LOW);
    digitalWrite(IN3, LOW);
    digitalWrite(IN4, LOW);
    encenderFreno();
    break;
    
  // Lógica de LEDs
  case 'A': // Intermitentes izquierda
    secuenciaIntermitente(ledsIzq, 6);
    break;
    
  case 'O': // Intermitentes derecha
    secuenciaIntermitente(ledsDer, 6);
    break;
}
} }
void secuenciaIntermitente(const int leds[], int cantidad) { for (int i = 0; i < cantidad; i++) { digitalWrite(leds[i], HIGH); delay(50); } delay(200); for (int i = 0; i < cantidad; i++) { digitalWrite(leds[i], LOW); delay(50); } }
void encenderFreno() { for (int i = 0; i < 4; i++) { digitalWrite(ledsFreno[i], HIGH); // Activa las luces de freno } }
void apagarFreno() { for (int i = 0; i < 4; i++) { digitalWrite(ledsFreno[i], LOW); // Apaga las luces de freno } } De este código juntalo con el siguiente código, no cambies nada de este primer código, el segundo de abajo si , solo los pines porque ya tengo ocupado del Arduino Mega los pines del 22 al 37 y los pines 6,7,9 y 10 #include #include
// Definición de pines para el LCD LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
// Definición de pines para el sensor HC-SR04 const int trigPin = 10; const int echoPin = 11;
// Pines adicionales const int led1 = 9; // LED de alerta (objeto muy cerca) const int led2 = 8; // LED de objeto fuera de rango const int buzzer = 13; // Buzzer para alerta sonora
long duration; int distance; Servo myServo; // Objeto servo
void setup() { pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); pinMode(led1, OUTPUT); pinMode(led2, OUTPUT); pinMode(buzzer, OUTPUT);
Serial.begin(9600); myServo.attach(12);
// Configuración del LCD lcd.begin(16, 2); lcd.setCursor(0, 0); lcd.print("BIENVENIDOS"); lcd.setCursor(0, 1); lcd.print("UNIVDEP PRESENTE"); delay(2000); lcd.clear(); }
void loop() { int i = 0; bool stopped = false;
// Rotar el servo de 0 a 180 grados y medir distancia while (i <= 180) { distance = calculateDistance(); displayDistanceOnLCD(distance); // Siempre mostrar la distancia
if (distance > 10) {
  myServo.write(i);
  Serial.print(i);
  Serial.print(",");
  Serial.print(distance);
  Serial.print(".");
  
  checkAlerts(distance);
  i++;  // Incrementar solo si el objeto está lejos
  stopped = false;
} else {
  if (!stopped) {
    Serial.println("Movimiento detenido, objeto cerca.");
    stopped = true;
  }
  checkAlerts(distance); // Mantener alerta activada
}
delay(20);
}
i = 180;
// Rotar el servo de 180 a 0 grados y medir distancia while (i >= 0) { distance = calculateDistance(); displayDistanceOnLCD(distance); // Siempre mostrar la distancia
if (distance > 10) {
  myServo.write(i);
  Serial.print(i);
  Serial.print(",");
  Serial.print(distance);
  Serial.print(".");
  
  checkAlerts(distance);
  i--;  // Decrementar solo si el objeto está lejos
  stopped = false;
} else {
  if (!stopped) {
    Serial.println("Movimiento detenido, objeto cerca.");
    stopped = true;
  }
  checkAlerts(distance); // Mantener alerta activada
}
delay(20);
} }
// Función para calcular la distancia usando el sensor ultrasónico int calculateDistance() { digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH); distance = duration * 0.034 / 2;
return distance; }
// Función para mostrar la distancia en el LCD en todo momento void displayDistanceOnLCD(int distance) { lcd.setCursor(0, 0); lcd.print("Distancia: "); lcd.print(distance); lcd.print(" cm ");
lcd.setCursor(0, 1); if (distance <= 10 && distance > 0) { lcd.print("OBJETO MUY CERCA "); } else if (distance > 10 && distance <= 500) { lcd.print(" "); } else { lcd.print("FUERA DE RANGO "); } }
// Función para manejar alertas con LED y buzzer void checkAlerts(int distance) { if (distance > 0 && distance <= 10) { digitalWrite(led1, HIGH); // Activar LED de alerta digitalWrite(buzzer, HIGH); // Activar buzzer digitalWrite(led2, LOW); // Apagar LED de fuera de rango } else { digitalWrite(led1, LOW); // Apagar LED de alerta digitalWrite(buzzer, LOW); // Apagar buzzer digitalWrite(led2, HIGH); // Encender LED de fuera de rango } }
11mo
Para combinar ambos fragmentos de código sin interferir en la lógica de cada uno, y reasignando los pines del segundo código para acomodar los que están ocupados en el Arduino Mega, aquí está la solución:
Consideraciones de Pines
  • Mantendremos los pines del primer código tal como están.
  • Cambiaremos los pines usados en el segundo código, asegurándonos de no usar los pines 5-13 y 22-37.
Código Combinado

Cpp


#include 
#include 

// Configuración de pines para el movimiento del carro
#define IN1 5
#define IN2 6
#define IN3 9
#define IN4 10

// Configuración de pines para los LEDs
const int ledsIzq[] = {22, 23, 24, 25, 26, 27};
const int ledsDer[] = {28, 29, 30, 31, 32, 33};
const int ledsFreno[] = {34, 35, 36, 37};

// Definición de pines para el LCD
LiquidCrystal lcd(38, 39, 40, 41, 42, 43); // Cambié los números de pines para el LCD

// Definición de pines para el sensor HC-SR04
const int trigPin = 44;
const int echoPin = 45;

// Pines adicionales
const int led1 = 46;  // LED de alerta
const int led2 = 47;  // LED de objeto fuera de rango
const int buzzer = 48; // Buzzer para alerta sonora

long duration;
int distance;
Servo myServo; // Objeto servo

void setup() {
  // Configuración de pines de salida para movimiento
  pinMode(IN1, OUTPUT);
  pinMode(IN2, OUTPUT);
  pinMode(IN3, OUTPUT);
  pinMode(IN4, OUTPUT);

  // Configuración de pines de salida para LEDs
  for (int i = 0; i < 6; i++) {
    pinMode(ledsIzq[i], OUTPUT);
    pinMode(ledsDer[i], OUTPUT);
  }
  
  for (int i = 0; i < 4; i++) {
    pinMode(ledsFreno[i], OUTPUT);
  }

  // Configuración de pines de Ultrasonido y otros
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  pinMode(buzzer, OUTPUT);
  
  Serial.begin(9600);
  myServo.attach(49);

  // Configuración del LCD
  lcd.begin(16, 2);
  lcd.setCursor(0, 0);
  lcd.print("BIENVENIDOS");
  lcd.setCursor(0, 1);
  lcd.print("UNIVDEP PRESENTE");
  delay(2000);
  lcd.clear();
}

void loop() {
  // Lógica del primer código (Movimientos y LEDs)
  if (Serial.available()) {
    char command = Serial.read();
    switch (command) {
      // Movimiento del carro
      case 'U': // Adelante
        digitalWrite(IN1, HIGH);
        digitalWrite(IN2, LOW);
        digitalWrite(IN3, HIGH);
        digitalWrite(IN4, LOW);
        apagarFreno();
        break;
        
      case 'D': // Atrás
        digitalWrite(IN1, LOW);
        digitalWrite(IN2, HIGH);
        digitalWrite(IN3, LOW);
        digitalWrite(IN4, HIGH);
        apagarFreno();
        break;
        
      case 'L': // Izquierda
        digitalWrite(IN1, LOW);
        digitalWrite(IN2, LOW);
        digitalWrite(IN3, HIGH);
        digitalWrite(IN4, LOW);
        apagarFreno();
        break;
        
      case 'R': // Derecha
        digitalWrite(IN1, HIGH);
        digitalWrite(IN2, LOW);
        digitalWrite(IN3, LOW);
        digitalWrite(IN4, LOW);
        apagarFreno();
        break;
        
      case 'Y': // Stop y enciende luces de freno
        digitalWrite(IN1, LOW);
        digitalWrite(IN2, LOW);
        digitalWrite(IN3, LOW);
        digitalWrite(IN4, LOW);
        encenderFreno();
        break;
        
      // Lógica de LEDs
      case 'A': // Intermitentes izquierda
        secuenciaIntermitente(ledsIzq, 6);
        break;
        
      case 'O': // Intermitentes derecha
        secuenciaIntermitente(ledsDer, 6);
        break;
    }
  }

  // Lógica del segundo código (Ultrasonido, Servo, LCD)
  int i = 0;
  bool stopped = false;

  // Rotar el servo de 0 a 180 grados y medir distancia
  while (i <= 180) {
    distance = calculateDistance();
    displayDistanceOnLCD(distance); // Siempre mostrar la distancia

    if (distance > 10) {
      myServo.write(i);
      Serial.print(i);
      Serial.print(",");
      Serial.print(distance);
      Serial.print(".");
      
      checkAlerts(distance);
      i++;  // Incrementar solo si el objeto está lejos
      stopped = false;
    } else {
      if (!stopped) {
        Serial.println("Movimiento detenido, objeto cerca.");
        stopped = true;
      }
      checkAlerts(distance); // Mantener alerta activada
    }
    delay(20);
  }

  i = 180;
  
  // Rotar el servo de 180 a 0 grados y medir distancia
  while (i >= 0) {
    distance = calculateDistance();
    displayDistanceOnLCD(distance); // Siempre mostrar la distancia

    if (distance > 10) {
      myServo.write(i);
      Serial.print(i);
      Serial.print(",");
      Serial.print(distance);
      Serial.print(".");
      
      checkAlerts(distance);
      i--;  // Decrementar solo si el objeto está lejos
      stopped = false;
    } else {
      if (!stopped) {
        Serial.println("Movimiento detenido, objeto cerca.");
        stopped = true;
      }
      checkAlerts(distance); // Mantener alerta activada
    }
    delay(20);
  }
}

// Funciones del primer código
void secuenciaIntermitente(const int leds[], int cantidad) {
  for (int i = 0; i < cantidad; i++) {
    digitalWrite(leds[i], HIGH);
    delay(50);
  }
  delay(200);
  for (int i = 0; i < cantidad; i++) {
    digitalWrite(leds[i], LOW);
    delay(50);
  }
}

void encenderFreno() {
  for (int i = 0; i < 4; i++) {
    digitalWrite(ledsFreno[i], HIGH); // Activa las luces de freno
  }
}

void apagarFreno() {
  for (int i = 0; i < 4; i++) {
    digitalWrite(ledsFreno[i], LOW); // Apaga las luces de freno
  }
}

// Funciones del segundo código
int calculateDistance() { 
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  
  duration = pulseIn(echoPin, HIGH);
  distance = duration * 0.034 / 2;

  return distance;
}

void displayDistanceOnLCD(int distance) {
  lcd.setCursor(0, 0);
  lcd.print("Distancia: ");
  lcd.print(distance);
  lcd.print(" cm ");

  lcd.setCursor(0, 1);
  if (distance <= 10 && distance > 0) {
    lcd.print("OBJETO MUY CERCA ");
  } else if (distance > 10 && distance <= 500) {
    lcd.print("                 ");
  } else {
    lcd.print("FUERA DE RANGO   ");
  }
}

void checkAlerts(int distance) {
  if (distance > 0 && distance <= 10) {
    digitalWrite(led1, HIGH);  // Activar LED de alerta
    digitalWrite(buzzer, HIGH); // Activar buzzer
    digitalWrite(led2, LOW);   // Apagar LED de fuera de rango
  } else {
    digitalWrite(led1, LOW);   // Apagar LED de alerta
    digitalWrite(buzzer, LOW); // Apagar buzzer
    digitalWrite(led2, HIGH);  // Encender LED de fuera de rango
  }
}
Explicaciones:
  • Definición de Pines: Los pines para el LCD, el sensor HC-SR04, los LEDs adicionales y el buzzer fueron reasignados para evitar conflictos.
  • Separación de Lógica: La lógica de movimiento del carro y de los LEDs se mantiene independiente de la lógica del sensor y la pantalla LCD, combinando ambas funcionalidades en el loop().
Este código unifica las funcionalidades de ambos fragmentos de código y debe funcionar siempre que las conexiones físicas coincidan con los pines en el código. Si necesitas más cambios o ajustes, por favor avísame.
11mo


  • Ground
    A common return path for electric current. Commonly known as ground.
  • Net Portal
    Wirelessly connects nets on schematic. Used to organize schematics and separate functional blocks. To wirelessly connect net portals, give them same designator. #portal
  • Power Net Portal
    Wirelessly connects power nets on schematic. Identical to the net portal, but with a power symbol. Used to organize schematics and separate functional blocks. To wirelessly connect power net portals, give them the same designator. #portal #power
  • Generic Resistor
    A generic fixed resistor for rapid developing circuit topology. Save precious design time by seamlessly add more information to this part (value, footprint, etc.) as it becomes available. Standard resistor values: 1.0Ω 10Ω 100Ω 1.0kΩ 10kΩ 100kΩ 1.0MΩ 1.1Ω 11Ω 110Ω 1.1kΩ 11kΩ 110kΩ 1.1MΩ 1.2Ω 12Ω 120Ω 1.2kΩ 12kΩ 120kΩ 1.2MΩ 1.3Ω 13Ω 130Ω 1.3kΩ 13kΩ 130kΩ 1.3MΩ 1.5Ω 15Ω 150Ω 1.5kΩ 15kΩ 150kΩ 1.5MΩ 1.6Ω 16Ω 160Ω 1.6kΩ 16kΩ 160kΩ 1.6MΩ 1.8Ω 18Ω 180Ω 1.8KΩ 18kΩ 180kΩ 1.8MΩ 2.0Ω 20Ω 200Ω 2.0kΩ 20kΩ 200kΩ 2.0MΩ 2.2Ω 22Ω 220Ω 2.2kΩ 22kΩ 220kΩ 2.2MΩ 2.4Ω 24Ω 240Ω 2.4kΩ 24kΩ 240kΩ 2.4MΩ 2.7Ω 27Ω 270Ω 2.7kΩ 27kΩ 270kΩ 2.7MΩ 3.0Ω 30Ω 300Ω 3.0KΩ 30KΩ 300KΩ 3.0MΩ 3.3Ω 33Ω 330Ω 3.3kΩ 33kΩ 330kΩ 3.3MΩ 3.6Ω 36Ω 360Ω 3.6kΩ 36kΩ 360kΩ 3.6MΩ 3.9Ω 39Ω 390Ω 3.9kΩ 39kΩ 390kΩ 3.9MΩ 4.3Ω 43Ω 430Ω 4.3kΩ 43KΩ 430KΩ 4.3MΩ 4.7Ω 47Ω 470Ω 4.7kΩ 47kΩ 470kΩ 4.7MΩ 5.1Ω 51Ω 510Ω 5.1kΩ 51kΩ 510kΩ 5.1MΩ 5.6Ω 56Ω 560Ω 5.6kΩ 56kΩ 560kΩ 5.6MΩ 6.2Ω 62Ω 620Ω 6.2kΩ 62KΩ 620KΩ 6.2MΩ 6.8Ω 68Ω 680Ω 6.8kΩ 68kΩ 680kΩ 6.8MΩ 7.5Ω 75Ω 750Ω 7.5kΩ 75kΩ 750kΩ 7.5MΩ 8.2Ω 82Ω 820Ω 8.2kΩ 82kΩ 820kΩ 8.2MΩ 9.1Ω 91Ω 910Ω 9.1kΩ 91kΩ 910kΩ 9.1MΩ #generics #CommonPartsLibrary
  • Generic Capacitor
    A generic fixed capacitor ideal for rapid circuit topology development. You can choose between polarized and non-polarized types, its symbol and the footprint will automatically adapt based on your selection. Supported options include standard SMD sizes for ceramic capacitors (e.g., 0402, 0603, 0805), SMD sizes for aluminum electrolytic capacitors, and through-hole footprints for polarized capacitors. Save precious design time by seamlessly add more information to this part (value, footprint, etc.) as it becomes available. Standard capacitor values: 1.0pF 10pF 100pF 1000pF 0.01uF 0.1uF 1.0uF 10uF 100uF 1000uF 10,000uF 1.1pF 11pF 110pF 1100pF 1.2pF 12pF 120pF 1200pF 1.3pF 13pF 130pF 1300pF 1.5pF 15pF 150pF 1500pF 0.015uF 0.15uF 1.5uF 15uF 150uF 1500uF 1.6pF 16pF 160pF 1600pF 1.8pF 18pF 180pF 1800pF 2.0pF 20pF 200pF 2000pF 2.2pF 22pF 20pF 2200pF 0.022uF 0.22uF 2.2uF 22uF 220uF 2200uF 2.4pF 24pF 240pF 2400pF 2.7pF 27pF 270pF 2700pF 3.0pF 30pF 300pF 3000pF 3.3pF 33pF 330pF 3300pF 0.033uF 0.33uF 3.3uF 33uF 330uF 3300uF 3.6pF 36pF 360pF 3600pF 3.9pF 39pF 390pF 3900pF 4.3pF 43pF 430pF 4300pF 4.7pF 47pF 470pF 4700pF 0.047uF 0.47uF 4.7uF 47uF 470uF 4700uF 5.1pF 51pF 510pF 5100pF 5.6pF 56pF 560pF 5600pF 6.2pF 62pF 620pF 6200pF 6.8pF 68pF 680pF 6800pF 0.068uF 0.68uF 6.8uF 68uF 680uF 6800uF 7.5pF 75pF 750pF 7500pF 8.2pF 82pF 820pF 8200pF 9.1pF 91pF 910pF 9100pF #generics #CommonPartsLibrary
  • Generic Inductor
    A generic fixed inductor for rapid developing circuit topology. *You can now change the footprint and 3D model at the top level anytime you want. This is the power of #generics
  • Terminal
    Terminal
    An electrical connector acting as reusable interface to a conductor and creating a point where external circuits can be connected.
  • RMCF0805JT47K0
    47 kOhms ±5% 0.125W, 1/8W Chip Resistor 0805 (2012 Metric) Automotive AEC-Q200 Thick Film #forLedBlink
  • 875105359001
    10uF Capacitor Aluminum Polymer 20% 16V SMD 5x5.3mm #forLedBlink #commonpartslibrary #capacitor #aluminumpolymer #radialcan
  • CTL1206FYW1T
    Yellow 595nm LED Indication - Discrete 1.7V 1206 (3216 Metric) #forLedBlink

Inspect

[Example] Arduino MKR Shield Template dd03

[Example] Arduino MKR Shield Template dd03
Description

Created
Last updated by beree
1 Contributor(s)
beree

Controls

Properties

Availability & Pricing

DistributorQty 1

Assets