Verificar conexión de cables por medio de una bocina

Hola Comunidad,
Tengo un dispositivo que quiero comprobar que cada cable esté conectado, haciendo una verificación mediante un led, si el cable está conectado se prende el led, igual tiene tres botones, dos que van pegados y uno individual, estos al ser presionados se activa un led. Lo que quiero hacer es que cuando todos estos leds estén conectados, que son 4 y los botones sean presionados, pueda hacer un sonido en la bocina, indicando que todo está bien.

Aquí tengo mi código, apenas agregué que si se presionan los botones suene, pero no sé cómo hacer para que cuando todos los leds estén prendidos la bocina se active, si algun led no estuviese prendido no debería de activarse la bocina.

Espero ne puedan ayudar.

int rojo = 12;
int amarillo = 11;
int verde = 10;
int azul = 9;
int blanco = 8;
int pulsadorfoco = 5;
int pinzumbador =13;
int frecuencia = 180;

void setup()
{
pinMode(7, INPUT_PULLUP);
pinMode(6, INPUT_PULLUP);
pinMode(4, INPUT_PULLUP);
pinMode(rojo, OUTPUT);
pinMode(amarillo, OUTPUT);
pinMode(verde, OUTPUT);
pinMode(azul, OUTPUT);
pinMode(blanco, OUTPUT);
pinMode(pulsadorfoco, OUTPUT);
}

void loop()
{

digitalWrite(rojo, HIGH);
delay(10);
digitalWrite(amarillo, HIGH);
delay(10);
digitalWrite(verde, HIGH);
delay(10);
digitalWrite(azul, HIGH);
delay(10);
digitalWrite(blanco, LOW);
delay(10);

if (digitalRead(7)==LOW)
{
digitalWrite(blanco, HIGH);
}
if (digitalRead(7)==HIGH)
{
digitalWrite(blanco, LOW);
}

if(digitalRead(6)==LOW && digitalRead(4)==LOW)

{
digitalWrite(pulsadorfoco, HIGH);
delay(10);
digitalWrite(pulsadorfoco, LOW);
delay(10);

}

while(digitalRead(6)==LOW && digitalRead(4)==LOW && digitalRead(7)==LOW)

{
tone(pinzumbador,frecuencia); // inicia el zumbido
delay(2000);
noTone(pinzumbador); // lo detiene a los dos segundos
delay(1000);
}

}

Por favor edita tu post y adjunta el código de acuerdo a las Normas del Foro en Español, punto 7. También usa la opción "Autoformato" del menú "Herramientas" de la IDE antes de copiar el código así nos facilitas su lectura.

Gracias, creo que ya lo puse cómo debe de ser! :smiley:

Hola Comunidad,
Tengo un dispositivo que quiero comprobar que cada mis 4 cables estén conectados, haciendo una verificación mediante un led, si el cable está conectado se prende el led, igual tiene tres botones, dos que van serie y uno individual, estos al ser presionados se activa un led. Lo que quiero hacer es que cuando todos estos 6 leds estén prendidos, que son 4 leds y los botones sean presionados, pueda hacer un sonido en la bocina, indicando que todo está bien.

Aquí tengo mi código, apenas agregué que si se presionan los botones suene, pero no sé cómo hacer para que cuando todos los leds estén prendidos la bocina se active, si algún led no estuviese prendido no debería de activarse la bocina.

Espero me puedan ayudar.

int Naranja = 12;
int Rojo = 11;
int Azul = 10;
int Amarillo = 9;
int Blanco1 = 8;
int Blanco2 = 7;
int Bocina = 4;
//int pinzumbador =13;
//int frecuencia = 180;

void setup()
{
  pinMode(6, INPUT_PULLUP);
  pinMode(5, INPUT_PULLUP);
  pinMode(Rojo, OUTPUT);
  pinMode(Amarillo, OUTPUT);
  pinMode(Naranja, OUTPUT);
  pinMode(Azul, OUTPUT);
  pinMode(Blanco1, OUTPUT);
  pinMode(Blanco2, OUTPUT);
  pinMode(Bocina, OUTPUT);
  analogWrite(Bocina,0);
}

void loop()
{

  int Pulsor1 = digitalRead(6);
  if (Pulsor1==LOW)
  {
    digitalWrite(Blanco1, HIGH);
  }  
  if (Pulsor1==HIGH)
  {
    digitalWrite(Blanco1, LOW);
  }
 
 
  int Pulsor2 = digitalRead(5);
  if (Pulsor2==HIGH)
  {
    digitalWrite(Blanco2, LOW);
  }  
  if (Pulsor2==LOW)
  {
    digitalWrite(Blanco2, HIGH);
  }

  int Naranja1 = digitalRead(Naranja);
  int Rojo1 = digitalRead(Rojo);
  int Azul1 = digitalRead(Azul);
  int Amarillo1 = digitalRead(Amarillo);
  if (Amarillo1==HIGH&&
  Rojo1==HIGH&&
  Azul1==HIGH&&
     Naranja1==HIGH&&
      Pulsor1==HIGH&&Pulsor2==HIGH)
  {
    digitalWrite(Bocina, LOW);
  }  
  if (Amarillo1==LOW&&
  Rojo1==LOW&&
  Azul1==LOW&&
     Naranja1==LOW&&
     Pulsor1==LOW&&Pulsor2==LOW)
  {
tone(Bocina, 261,200);
delay(5000);
    digitalWrite(Bocina, HIGH);

  }
   
 digitalWrite(Rojo, HIGH);
  //digitalWrite(Rojo, LOW);
  digitalWrite(Amarillo, HIGH);
  //digitalWrite(Amarillo, LOW);
  digitalWrite(Naranja, HIGH);
  //digitalWrite(Naranja, LOW);
  digitalWrite(Azul, HIGH);
  //digitalWrite(Azul, LOW);
  digitalWrite(Blanco1, LOW);
  digitalWrite(Blanco2, LOW);
  digitalWrite(Bocina, LOW);
}

Guarda en variables el estado de cada LED y listo.

Otra opción es leer el estado del pin de cada LED (aunque sea salida se puede leer y saber si está HIGH o LOW).

si los 4 pulsadores estan todos presionados con solo sumarlos obtienes 4.
Esa cuenta solo la haces luego de leer el estado de todos los pulsadores y la pones a 0 con cada ciclo.
Si son 4, entonces se da la condición y accionas el buzzer de lo contrario nada.

  int suma = 0;
  int Naranja1 = digitalRead(Naranja);
  int Rojo1 = digitalRead(Rojo);
  int Azul1 = digitalRead(Azul);
  int Amarillo1 = digitalRead(Amarillo);
   suma = Naranja1+Rojo1+Azul1+Amarillo1;
if (suma == 4) 
    // sonido
else 
   // apagar sonido

Moderador:
He cerrado una publicación similar en esta sección
El doble posteo va en contra de las reglas del foro de Arduino.
La razón es que las publicaciones duplicadas hacen perder el tiempo a las personas que intentan ayudar.
Alguien podría pasar mucho tiempo investigando y escribiendo una respuesta detallada sobre un tema, sin saber que alguien más ya hizo lo mismo en el otro tema.
La publicación cruzada repetida puede resultar en una suspensión del foro, comenzando por una baneo de 7 dias e incluso si repites el comportamiento hasta cerrar tu cuenta.
En el futuro, crea solo un tema para cada tema distinto.
Lee nuevamente si es que no lo has hecho, las Normas del foro.
Gracias de antemano por tu cooperacion.
Lee nuevamente si es que no lo has hecho, las Normas del foro.
Gracias de antemano por tu cooperacion.

¿Cómo se guardan los valores del estado de cada LED?

Lo Hice de la siguiente manera, aún así no funcionó es que Naranja, Rojo, Azul y Amarillo son LEDs no pulsadores, supongo que como no hay que pulse no funciona o puse mal el código, mira te muestro:

int rojo = 12;
int amarillo = 11;
int verde = 10;
int azul = 9;
int blanco = 8;
int pulsadorfoco = 5;
int pinzumbador =3;
int frecuencia = 180;


  int Verde1 = digitalRead(verde);
  int Rojo1 = digitalRead(rojo);
  int Azul1 = digitalRead(azul);
  int Amarillo1 = digitalRead(amarillo);
  
int suma = 0;


void setup()
{
  Serial.begin(115200);
  pinMode(7, INPUT_PULLUP);
  pinMode(6, INPUT_PULLUP);
  pinMode(rojo, OUTPUT);
  pinMode(amarillo, OUTPUT);
  pinMode(verde, OUTPUT);
  pinMode(azul, OUTPUT);
  pinMode(blanco, OUTPUT);
  pinMode(pulsadorfoco, OUTPUT);

  }
 


void loop()
{
  suma = Verde1+Rojo1+Azul1+Amarillo1;
    delay(10);
  digitalWrite(rojo, HIGH);
  delay(10);
  digitalWrite(amarillo, HIGH);
  delay(10);
  digitalWrite(verde, HIGH);
  delay(10);
  digitalWrite(azul, HIGH);
  delay(10);
  digitalWrite(blanco, LOW);
  delay(10);
 

if (digitalRead(7)==LOW)
  {
    digitalWrite(blanco, HIGH);
  }  
  if (digitalRead(7)==HIGH)
  {
    digitalWrite(blanco, LOW);
  }  

if(digitalRead(6)==LOW)
 
  {
    digitalWrite(pulsadorfoco, HIGH);
    delay(10);
     digitalWrite(pulsadorfoco, LOW);
     delay(10);
  }  

if (suma == 4) 
    // sonido
{
tone(pinzumbador,frecuencia);    // inicia el zumbido
    delay(2000);                    
    noTone(pinzumbador);               // lo detiene a los dos segundos
    delay(1000);

}
else
{
    noTone(pinzumbador);               // lo detiene a los dos segundos
    delay(1000);
}

 }

Bueno implementalo con los pulsadores.
Y no uses delay(1000) a cada instante o vas a esperar hasta navidad para que reaccione tu código.
Ve a Documentación y aprende a usar millis(), descarta delay() de tus códigos.

Modifiqué el código de #4, no lo he probado (hay un corte de energía en casa y estoy con el móvil), fíjate si va como quieres

int Naranja = 12;
int Rojo = 11;
int Azul = 10;
int Amarillo = 9;
int Blanco1 = 8;
int Blanco2 = 7;
int Bocina = 4;
//int pinzumbador =13;
//int frecuencia = 180;

void setup()
{
  pinMode(6, INPUT_PULLUP);
  pinMode(5, INPUT_PULLUP);
  pinMode(Rojo, OUTPUT);
  pinMode(Amarillo, OUTPUT);
  pinMode(Naranja, OUTPUT);
  pinMode(Azul, OUTPUT);
  pinMode(Blanco1, OUTPUT);
  pinMode(Blanco2, OUTPUT);
  pinMode(Bocina, OUTPUT);
  analogWrite(Bocina,0);
}

void loop()
{

  int Pulsor1 = digitalRead(6);
  if (Pulsor1==LOW)
  {
    digitalWrite(Blanco1, HIGH);
  }  
  if (Pulsor1==HIGH)
  {
    digitalWrite(Blanco1, LOW);
  }
 
 
  int Pulsor2 = digitalRead(5);
  if (Pulsor2==HIGH)
  {
    digitalWrite(Blanco2, LOW);
  }  
  if (Pulsor2==LOW)
  {
    digitalWrite(Blanco2, HIGH);
  }

  int Naranja1 = digitalRead(Naranja);
  int Rojo1 = digitalRead(Rojo);
  int Azul1 = digitalRead(Azul);
  int Amarillo1 = digitalRead(Amarillo);
  int sonar = Amarillo1 + Rojo1 + Azul1 +  Naranja1;
      
  if(sonar == 4 && Pulsor1 == LOW && Pulsor2 == LOW)
  {
tone(Bocina, 261,200);
delay(5000);
noTone(Bocina);
  }
   
 digitalWrite(Rojo, HIGH);
  //digitalWrite(Rojo, LOW);
  digitalWrite(Amarillo, HIGH);
  //digitalWrite(Amarillo, LOW);
  digitalWrite(Naranja, HIGH);
  //digitalWrite(Naranja, LOW);
  digitalWrite(Azul, HIGH);
  //digitalWrite(Azul, LOW);
  digitalWrite(Blanco1, LOW);
  digitalWrite(Blanco2, LOW);
  digitalWrite(Bocina, LOW);
}

Ya lo Probé, sin embargo si desconecto un led y sigo presionando los dos botones, sigue sonando la bocina

Si desconectas un LED de un pin que pusiste en HIGH, el pin no cambia de estado, sigue en HIGH.

Y en el último código pones todos los 4 pines de los LED en HIGH (sin contar los blancos) en cada pasada de loop(), obviamente va a sonar cuando pulses los 2 botones.

Creo que no tienes muy en claro lo que estás haciendo, ¿no?

Tienes razón, es que yo lo que quería hacer era que cuando un LED se desconecte estuviese como LOW, pero realmente no sé cómo ya que recientemente inicié en esto y todavía me confundo.

No hay forma directa de sensar si hay consumo, o no, en un pin. Entonces no puedes saber si hay un LED conectado o no lo hay.

No hablaste de saber si los LED estaban desconectados (dijiste encendidos) sino desde el principio te hubiese dicho que no se puede.

¿Qué puedo utilizar para hacerlo?

¿Saber si un LED se desconectó?
¿Y para qué tendrías que desconectar un LED?

De que se trata lo que intentas hacer. No tiene mucho sentido saber si un led esta o no conectado a menos que sea una representación de otra cosa que no cuentas.
Si mides la corriente entonces puedes saber si esta conectado o no.

cada LED lo tengo conectado a un cable, ese cable es el que estoy comprobando si pasa corriente o no (para saber si el cable está bien o no), me doy cuenta que el cable funciona si prende el LED, una vez que los 4 LEDs prendan y accione los botones, debe sonar la bocina una vez.
Solo es eso.

Bueno conceptualmete lo haces mal
Los elementos de un arduino para saber si algo funciona o no son las entradas digitales. Entonces si un cable tiene o no corriente, es porque tiene o no tensión.
Supongo que al cable le aplicas tensión, y por lo tanto circula corriente y enciende o no el led.
Como no has proporcionado un esquema electrico estoy adivinando tu lógica que de por si es complicada o confusa.
Entonces supongamos que usas 5V de una fuente a tus cables, y estos esten bien o no daran en el extremo pones una entrada digital del arduino. Tienes 6 cables, o sea 6 entradas digitales. Cada entrada dará un 0 o 1 de acuerdo a si el cable este bueno o malo, o sea circula corriente y por lo tanto habra una diferencia de potencial en la entrada del Arduino.
Ahora si podras saber como estan los cables. El reporte de cada cable lo puedes hacer usando otros 6 pines ahora como salida y accionando LEDs con lo cual llevas consumidos 6 + 6 = 12 pines. 6 de entrada y 6 de salida.
Te quedan pines extra aun para los pulsadores y demás. No toques 0 y 1 son para ver en el monitor serie.
Se entiende?
Agrego: En las entradas que reciben los cables a probar coloca 6 resistencias de 10k a GND. Alimenta los cables con 5V si usas Arduino UNO/NANO.
Los LEDs dejalos donde estan y usa otros 6 pines, puedes usar A0 a A5 como entradas digitales si quieres.