#include <TimerOne.h>
#define LED_ROJO 10 // Válvula (simulada con un LED)
#define POT A0 // Potenciómetro para simular el tiempo
// Definición de pines para el 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
#define DIG1 9
#define DIG2 10
#define Pulsador1 A1
#define Pulsador2 A2
#define Pulsador3 A3
#define Pulsador4 A4
volatile int B = 0; // Variable para el número a mostrar
int A = 0;
int temp_selec = 50; // Temperatura seleccionada por defecto
int temp_resistencia = 0; // Temperatura leída del potenciómetro
int tiempo = 0;
// Variables para el tiempo de control
volatile int tiempo_lec = 0;
volatile int digitoActual = 0; // Variable para alternar entre displays
void setup() {
// Configuración de pines del display
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);
pinMode(DIG1, OUTPUT);
pinMode(DIG2, OUTPUT);
// Configuración de pines de entrada
pinMode(Pulsador1, INPUT_PULLUP);
pinMode(Pulsador2, INPUT_PULLUP);
pinMode(Pulsador3, INPUT_PULLUP);
pinMode(Pulsador4, INPUT_PULLUP);
pinMode(POT, INPUT); // Potenciómetro como entrada
pinMode(LED_ROJO, OUTPUT); // LED que simula la válvula como salida
// Configuración del temporizador
Timer1.initialize(5000); // Interrupción cada 5000 microsegundos (5 ms)
Timer1.attachInterrupt(ISR_Blink); // Interrupción para el display y control
}
void loop () {
// Leer la temperatura simulada del potenciómetro
temp_resistencia = analogRead(POT);
temp_resistencia = map(temp_resistencia, 0, 1023, 0, 100); // Mapeo a un rango de 0 a 100 grados
// Control de la válvula basado en temperatura
if (temp_resistencia >= temp_selec) {
digitalWrite(LED_ROJO, HIGH); // Activar válvula
} else {
digitalWrite(LED_ROJO, LOW); // Desactivar válvula
}
// Lógica para selección de temperatura con pulsadores
if (digitalRead(Pulsador1) == LOW) {
temp_selec = 40; // Selección de temperatura con Pulsador 1
} else if (digitalRead(Pulsador2) == LOW) {
temp_selec = 50; // Selección de temperatura con Pulsador 2
} else if (digitalRead(Pulsador3) == LOW) {
temp_selec = 60; // Selección de temperatura con Pulsador 3
} else if (digitalRead(Pulsador4) == LOW) {
temp_selec = 70; // Selección de temperatura con Pulsador 4
}
// Muestra los datos en Serial para verificación
Serial.print("Temperatura actual: ");
Serial.print(temp_resistencia);
Serial.print(" | Temperatura seleccionada: ");
Serial.println(temp_selec);
}
// Función de interrupción para el temporizador
void ISR_Blink() {
int decena = temp_resistencia / 10; // Primer dígito
int unidad = temp_resistencia -(decena*10); // Segundo dígito
if (digitoActual == 0) {
// Mostrar decenas en el primer display
digitalWrite(DIG1, HIGH);
digitalWrite(DIG2, LOW);
display(decena);
digitoActual = 1; // Cambia al siguiente dígito
} else {
// Mostrar unidades en el segundo display
digitalWrite(DIG1, LOW);
digitalWrite(DIG2, HIGH);
display(unidad);
digitoActual = 0; // Vuelve al primer dígito
}
}
// Función para mostrar dígitos en display de 7 segmentos
void display(int dato){
// Apaga todos los segmentos
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){
digitalWrite(PIN_A, LOW);
digitalWrite(PIN_B, LOW);
digitalWrite(PIN_C, LOW);
digitalWrite(PIN_D, LOW);
digitalWrite(PIN_E, LOW);
digitalWrite(PIN_F, LOW);
} else if (dato == 1){
digitalWrite(PIN_B, LOW);
digitalWrite(PIN_C, LOW);
} else if (dato == 2){
digitalWrite(PIN_A, LOW);
digitalWrite(PIN_B, LOW);
digitalWrite(PIN_D, LOW);
digitalWrite(PIN_E, LOW);
digitalWrite(PIN_G, LOW);
} else if (dato == 3){
digitalWrite(PIN_A, LOW);
digitalWrite(PIN_B, LOW);
digitalWrite(PIN_C, LOW);
digitalWrite(PIN_D, LOW);
digitalWrite(PIN_G, LOW);
} else if (dato == 4){
digitalWrite(PIN_B, LOW);
digitalWrite(PIN_C, LOW);
digitalWrite(PIN_F, LOW);
digitalWrite(PIN_G, LOW);
} else if (dato == 5){
digitalWrite(PIN_A, LOW);
digitalWrite(PIN_C, LOW);
digitalWrite(PIN_D, LOW);
digitalWrite(PIN_F, LOW);
digitalWrite(PIN_G, LOW);
} else if (dato == 6){
digitalWrite(PIN_A, LOW);
digitalWrite(PIN_C, LOW);
digitalWrite(PIN_D, LOW);
digitalWrite(PIN_E, LOW);
digitalWrite(PIN_F, LOW);
digitalWrite(PIN_G, LOW);
} else if (dato == 7){
digitalWrite(PIN_A, LOW);
digitalWrite(PIN_B, LOW);
digitalWrite(PIN_C, LOW);
} else if (dato == 8){
digitalWrite(PIN_A, LOW);
digitalWrite(PIN_B, LOW);
digitalWrite(PIN_C, LOW);
digitalWrite(PIN_D, LOW);
digitalWrite(PIN_E, LOW);
digitalWrite(PIN_F, LOW);
digitalWrite(PIN_G, LOW);
} else if (dato == 9){
digitalWrite(PIN_A, LOW);
digitalWrite(PIN_B, LOW);
digitalWrite(PIN_C, LOW);
digitalWrite(PIN_F, LOW);
digitalWrite(PIN_G, LOW);
}
}