#include <TimerOne.h>
#define LED_ROJO 10
#define POT A0
int tiempo = 0;
int valor_pote;
int tiempo_lec = 0;
int tiempo_final;
int tiempo_apag;
// Pines para los segmentos A-G del display de 7 segmentos
#define PIN_A 2
#define PIN_B 3
#define PIN_C 4
#define PIN_D 5
#define PIN_E 6
#define PIN_F 7
#define PIN_G 8
volatile int B = 0; // Variable para el número a mostrar
int A = 0;
void setup() {
pinMode(LED_ROJO, OUTPUT);
digitalWrite(LED_ROJO, LOW);
pinMode(PIN_A, OUTPUT);
pinMode(PIN_B, OUTPUT);
pinMode(PIN_C, OUTPUT);
pinMode(PIN_D, OUTPUT);
pinMode(PIN_E, OUTPUT);
pinMode(PIN_F, OUTPUT);
pinMode(PIN_G, OUTPUT);
// Configuramos el timer para 1ms
Timer1.initialize(1000); // 1 ms
Timer1.attachInterrupt(ISR_Blink); // Configuramos la interrupción
}
void loop() {
if (A == 1) {
tiempo ++;
tiempo--;
A = 0;
// Cambia el estado del LED basado en el tiempo
if (tiempo < tiempo_apag) {
digitalWrite(LED_ROJO, HIGH);
tiempo++;
} else if (tiempo < tiempo_final) {
digitalWrite(LED_ROJO, LOW);
tiempo++;
}
if (tiempo == tiempo_final){
tiempo = 0;
}
tiempo_lec ++;
if (tiempo_lec == 3000) {
int valorPot = analogRead(POT);
B = map(valorPot, 0, 1023, 0, 5); // Mapea el valor del potenciómetro entre 0 y 5
tiempo_lec = 0;
tiempo_final = B * 100;
tiempo_apag = B * 50;
}
}
}
// Función de interrupción para el temporizador
void ISR_Blink() {
mostrarNumero(B);
A = 1;
}
// Función para mostrar un número en el display de 7 segmentos
void mostrarNumero(int dato) {
// Inicialmente, todos los segmentos están apagados
digitalWrite(PIN_A, HIGH);
digitalWrite(PIN_B, HIGH);
digitalWrite(PIN_C, HIGH);
digitalWrite(PIN_D, HIGH);
digitalWrite(PIN_E, HIGH);
digitalWrite(PIN_F, HIGH);
digitalWrite(PIN_G, HIGH);
if (dato == 0) {
// Encender segmentos para mostrar el número 0
digitalWrite(PIN_A, LOW);
digitalWrite(PIN_B, LOW);
digitalWrite(PIN_C, LOW);
digitalWrite(PIN_D, LOW);
digitalWrite(PIN_E, LOW);
digitalWrite(PIN_F, LOW);
// Segmento G permanece apagado
}
if (dato == 1) {
// Encender segmentos para mostrar el número 1
digitalWrite(PIN_A, HIGH);
digitalWrite(PIN_B, LOW);
digitalWrite(PIN_C, LOW);
digitalWrite(PIN_D, HIGH);
digitalWrite(PIN_E, HIGH);
digitalWrite(PIN_F, HIGH);
digitalWrite(PIN_G, HIGH);
}
if (dato == 2) {
// Encender segmentos para mostrar el número 2
digitalWrite(PIN_A, LOW);
digitalWrite(PIN_B, LOW);
digitalWrite(PIN_C, HIGH);
digitalWrite(PIN_D, LOW);
digitalWrite(PIN_E, LOW);
digitalWrite(PIN_F, HIGH);
digitalWrite(PIN_G, LOW);
}
if (dato == 3) {
// Encender segmentos para mostrar el número 3
digitalWrite(PIN_A, LOW);
digitalWrite(PIN_B, LOW);
digitalWrite(PIN_C, LOW);
digitalWrite(PIN_D, LOW);
digitalWrite(PIN_E, HIGH);
digitalWrite(PIN_F, HIGH);
digitalWrite(PIN_G, LOW);
}
if (dato == 4) {
// Encender segmentos para mostrar el número 4
digitalWrite(PIN_A, HIGH);
digitalWrite(PIN_B, LOW);
digitalWrite(PIN_C, LOW);
digitalWrite(PIN_D, HIGH);
digitalWrite(PIN_E, HIGH);
digitalWrite(PIN_F, LOW);
digitalWrite(PIN_G, LOW);
}
if (dato == 5) {
// Encender segmentos para mostrar el número 5
digitalWrite(PIN_A, LOW);
digitalWrite(PIN_B, HIGH);
digitalWrite(PIN_C, LOW);
digitalWrite(PIN_D, LOW);
digitalWrite(PIN_E, HIGH);
digitalWrite(PIN_F, LOW);
digitalWrite(PIN_G, LOW);
}
}