- Los alumnos de 4ºDIVER realizan el diseño y programación para un display de 7 segmentos. Este proyecto se destinará como marcador del futbolín ubicado en la ludoteca del centro.
- El diseño se realiza en SketchUp for Schools, imprimiendo posteriormente cada una de las piezas en la impresora 3D.

- Cabe destacar que la parte frontal del display se imprime con PLA translúcido para que se aprecie el encendido de los leds.

- El circuito se realiza previamente en TinkerCAD como práctica, antes de realizarlo físicamente.
Posteriormente se programa para que realice las siguientes funciones:
- Con una pulsación corta, el marcador aumenta en una cifra.
- Con una pulsación larga (superior a 1 segundo), el marcador se reinicia marcando el número cero.
Programa de ARDUINO:
// Definir los pines de los LEDs
int leds[] = {2, 3, 4, 5, 6, 7, 8};
// Pin del pulsador
const int botonPin = 9;
// Variable para almacenar el tiempo de inicio cuando se presiona el botón
unsigned long tiempoInicio = 0;
// Variable para almacenar el estado anterior del botón
bool ultimoEstadoBoton = HIGH;
// Variable para almacenar el estado actual del botón
bool estadoBoton = HIGH;
// Variable para almacenar el número actual mostrado en los LEDs
int numeroActual = 0;
// Definir los patrones de cada número en los LEDs
// 0-9
bool 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, 0}, // 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, 1, 0, 1, 1} // 9
};
void setup() {
// Inicializar los pines de los LEDs como salidas
for (int i = 0; i < 7; i++) {
pinMode(leds[i], OUTPUT);
}
// Configurar el pin del pulsador como entrada
pinMode(botonPin, INPUT_PULLUP);
// Mostrar el número cero al iniciar Arduino
mostrarNumero(0);
}
void loop() {
// Leer el estado actual del pulsador
estadoBoton = digitalRead(botonPin);
// Si el estado actual del botón es diferente al estado anterior
if (estadoBoton != ultimoEstadoBoton) {
// Si el botón acaba de ser pulsado (de HIGH a LOW)
if (estadoBoton == LOW) {
// Almacenar el tiempo de inicio
tiempoInicio = millis();
} else {
// Si el botón acaba de ser soltado (de LOW a HIGH)
// Calcular la duración del tiempo que el botón fue pulsado
unsigned long duracionPulsacion = millis() - tiempoInicio;
// Si la duración de la pulsación es mayor o igual a 1000ms (1 segundos)
if (duracionPulsacion >= 1000) {
// Parpadear los LEDs antes de apagarlos
parpadearLeds();
// Apagar todos los LEDs
apagarLeds();
// Reiniciar el número actual a cero
numeroActual = 0;
// Mostrar el número cero
mostrarNumero(numeroActual);
} else {
// Si la duración de la pulsación es menor a 3 segundos, incrementar el número actual
numeroActual = (numeroActual + 1) % 10;
// Mostrar el número actual
mostrarNumero(numeroActual);
}
}
}
// Actualizar el estado anterior del botón
ultimoEstadoBoton = estadoBoton;
}
// Función para mostrar un número en los LEDs
void mostrarNumero(int numero) {
for (int i = 0; i < 7; i++) {
digitalWrite(leds[i], numeros[numero][i]);
}
}
// Función para apagar todos los LEDs
void apagarLeds() {
for (int i = 0; i < 7; i++) {
digitalWrite(leds[i], LOW);
}
}
// Función para parpadear los LEDs tres veces
void parpadearLeds() {
for (int j = 0; j < 3; j++) {
for (int i = 0; i < 7; i++) {
digitalWrite(leds[i], HIGH);
}
delay(100);
apagarLeds();
delay(100);
}
}
No hay comentarios:
Publicar un comentario