Simulación de Semáforo con Arduino y Display de 7 Segmentos
Simulación de Semáforo con Arduino y Display de 7 Segmentos
Este ejercicio práctico tiene como objetivo simular la secuencia de luces de un semáforo utilizando Arduino y un display de 7 segmentos para mostrar una cuenta regresiva. Permite practicar el uso de salidas digitales y retardos (delay).
Secuencia semáforo:
- LED Verde debe encender durante 5 segundos y luego se apaga.
- LEDamarillo enciende durante 2 segundos y luego se apaga.
- LED Rojo enciende durante 5 segundos y luego se apaga.
Requisitos del Conteo:
- El conteo debe reflejarse en el display de 7 segmentos, teniendo en cuenta los tiempos de activación de los LEDs.
- Por ejemplo, cuando el LED rojo se encienda, el display debe mostrar una cuenta regresiva de 5 a 0 durante los 5 segundos que permanece encendido.
- Esta misma metodología se aplicará para los LEDs verde y amarillo.
Objetivo:
Diseñar y simular la secuencia del semáforo utilizando Arduino, mostrando la cuenta regresiva correspondiente en el display de 7 segmentos.
Código de ejemplo 1:
const int led_rojo = 13;
const int led_amarillo = 12;
const int led_verde = 11;
const int A = 2;
const int B = 3;
const int C = 4;
const int D = 5;
const int E = 6;
const int F = 7;
const int G = 8;
void setup()
{
pinMode(led_rojo, OUTPUT);
pinMode(led_amarillo, OUTPUT);
pinMode(led_verde, OUTPUT);
pinMode(A, OUTPUT);
pinMode(B, OUTPUT);
pinMode(C, OUTPUT);
pinMode(D, OUTPUT);
pinMode(E, OUTPUT);
pinMode(F, OUTPUT);
pinMode(G, OUTPUT);
}
void loop()
{
//código semaforo
digitalWrite(led_rojo, HIGH);
/*Número 5*/
digitalWrite(A, 0);
digitalWrite(B, 1);
digitalWrite(C, 0);
digitalWrite(D, 0);
digitalWrite(E, 1);
digitalWrite(F, 0);
digitalWrite(G, 0);
delay(1000);
/*Fin5*/
/*Número 4*/
digitalWrite(A, 1);
digitalWrite(B, 0);
digitalWrite(C, 0);
digitalWrite(D, 1);
digitalWrite(E, 1);
digitalWrite(F, 0);
digitalWrite(G, 0);
delay(1000);
/*Fin4*/
/*Número 3*/
digitalWrite(A, 0);
digitalWrite(B, 0);
digitalWrite(C, 0);
digitalWrite(D, 0);
digitalWrite(E, 1);
digitalWrite(F, 1);
digitalWrite(G, 0);
delay(1000);
/*Fin3*/
/*Número 2*/
digitalWrite(A, 0);
digitalWrite(B, 0);
digitalWrite(C, 1);
digitalWrite(D, 0);
digitalWrite(E, 0);
digitalWrite(F, 1);
digitalWrite(G, 0);
delay(1000);
/*Fin2*/
/*Número 1*/
digitalWrite(A, 1);
digitalWrite(B, 0);
digitalWrite(C, 0);
digitalWrite(D, 1);
digitalWrite(E, 1);
digitalWrite(F, 1);
digitalWrite(G, 1);
delay(1000);
/*Fin1*/
/*Número 0*/
digitalWrite(A, 0);
digitalWrite(B, 0);
digitalWrite(C, 0);
digitalWrite(D, 0);
digitalWrite(E, 0);
digitalWrite(F, 0);
digitalWrite(G, 1);
delay(600);
/*Fin 0*/
digitalWrite(led_rojo, LOW);
digitalWrite(led_amarillo, HIGH);
/*Número 2*/
digitalWrite(A, 0);
digitalWrite(B, 0);
digitalWrite(C, 1);
digitalWrite(D, 0);
digitalWrite(E, 0);
digitalWrite(F, 1);
digitalWrite(G, 0);
delay(1000);
/*Fin2*/
/*Número 1*/
digitalWrite(A, 1);
digitalWrite(B, 0);
digitalWrite(C, 0);
digitalWrite(D, 1);
digitalWrite(E, 1);
digitalWrite(F, 1);
digitalWrite(G, 1);
delay(1000);
/*Fin1*/
/*Número 0*/
digitalWrite(A, 0);
digitalWrite(B, 0);
digitalWrite(C, 0);
digitalWrite(D, 0);
digitalWrite(E, 0);
digitalWrite(F, 0);
digitalWrite(G, 1);
delay(600);
/*Fin 0*/
digitalWrite(led_amarillo, LOW);
digitalWrite(led_verde, HIGH);
/*Número 5*/
digitalWrite(A, 0);
digitalWrite(B, 1);
digitalWrite(C, 0);
digitalWrite(D, 0);
digitalWrite(E, 1);
digitalWrite(F, 0);
digitalWrite(G, 0);
delay(1000);
/*Fin5*/
/*Número 4*/
digitalWrite(A, 1);
digitalWrite(B, 0);
digitalWrite(C, 0);
digitalWrite(D, 1);
digitalWrite(E, 1);
digitalWrite(F, 0);
digitalWrite(G, 0);
delay(1000);
/*Fin4*/
/*Número 3*/
digitalWrite(A, 0);
digitalWrite(B, 0);
digitalWrite(C, 0);
digitalWrite(D, 0);
digitalWrite(E, 1);
digitalWrite(F, 1);
digitalWrite(G, 0);
delay(1000);
/*Fin3*/
/*Número 2*/
digitalWrite(A, 0);
digitalWrite(B, 0);
digitalWrite(C, 1);
digitalWrite(D, 0);
digitalWrite(E, 0);
digitalWrite(F, 1);
digitalWrite(G, 0);
delay(1000);
/*Fin2*/
/*Número 1*/
digitalWrite(A, 1);
digitalWrite(B, 0);
digitalWrite(C, 0);
digitalWrite(D, 1);
digitalWrite(E, 1);
digitalWrite(F, 1);
digitalWrite(G, 1);
delay(1000);
/*Fin1*/
/*Número 0*/
digitalWrite(A, 0);
digitalWrite(B, 0);
digitalWrite(C, 0);
digitalWrite(D, 0);
digitalWrite(E, 0);
digitalWrite(F, 0);
digitalWrite(G, 1);
delay(600);
/*Fin 0*/
digitalWrite(led_verde,LOW);
}
El código anterior enciende simultáneamente el LED durante 5 segundos e inicia una cuenta regresiva de 5 a 0, que se muestra en el display de 7 segmentos. Esta secuencia se aplica de la misma manera para los LEDs amarillo y verde.
Código de ejemplo 2:
// Definir pines para los LEDs
const int ledVerde = 2;
const int ledAmarillo = 3;
const int ledRojo = 4;
// Definir pines para el display de 7 segmentos
const int a = 5;
const int b = 6;
const int c = 7;
const int d = 8;
const int e = 9;
const int f = 10;
const int g = 11;
// Array para los números del display de 7 segmentos
int numeros[10][7] = {
{1, 1, 1, 1, 1, 1, 0}, // 0
{0, 1, 1, 0, 0, 0, 0}, // 1
{1, 1, 0, 1, 1, 0, 1}, // 2
{1, 1, 1, 1, 0, 0, 1}, // 3
{0, 1, 1, 0, 0, 1, 1}, // 4
{1, 0, 1, 1, 0, 1, 1}, // 5
{1, 0, 1, 1, 1, 1, 1}, // 6
{1, 1, 1, 0, 0, 0, 0}, // 7
{1, 1, 1, 1, 1, 1, 1}, // 8
{1, 1, 1, 0, 0, 1, 1} // 9
};
void setup() {
// Configurar pines de los LEDs como salidas
pinMode(ledVerde, OUTPUT);
pinMode(ledAmarillo, OUTPUT);
pinMode(ledRojo, OUTPUT);
// Configurar pines del display de 7 segmentos como salidas
pinMode(a, OUTPUT);
pinMode(b, OUTPUT);
pinMode(c, OUTPUT);
pinMode(d, OUTPUT);
pinMode(e, OUTPUT);
pinMode(f, OUTPUT);
pinMode(g, OUTPUT);
}
void loop() {
// Secuencia del semáforo
encenderLED(ledVerde, 5);
encenderLED(ledAmarillo, 2);
encenderLED(ledRojo, 5);
}
void encenderLED(int led, int duracion) {
for (int i = duracion; i >= 0; i--) {
digitalWrite(led, HIGH);
mostrarNumero(i);
delay(1000);
}
digitalWrite(led, LOW);
}
void mostrarNumero(int num) {
digitalWrite(a, numeros[num][0]);
digitalWrite(b, numeros[num][1]);
digitalWrite(c, numeros[num][2]);
digitalWrite(d, numeros[num][3]);
digitalWrite(e, numeros[num][4]);
digitalWrite(f, numeros[num][5]);
digitalWrite(g, numeros[num][6]);
}
Pública tu duda o comentario
Resuelve tus dudas con la comunidad.
(0) Comentarios
No registra comentarios, se el primero en comentar.
Publicar