#include <TimerOne.h>
#define LED 9
#define POT A0
#define TERMO A1
int t_enc = 0;
int t_apag = 0;
int seg = 0;
int pot_v = 0;
int t_lec = 0;
// Pines para los segmentos A-G del display de 7 segmentos
#define A 2 // Segmento A
#define B 3 // Segmento B
#define C 4 // Segmento C
#define D 5 // Segmento D
#define E 6 // Segmento E
#define F 7 // Segmento F
#define G 8 // Segmento G
int A_val = 0; // Variable para el número a mostrar
void setup() {
pinMode(LED, OUTPUT);
digitalWrite(LED, LOW);
pinMode(A, OUTPUT);
pinMode(B, OUTPUT);
pinMode(C, OUTPUT);
pinMode(D, OUTPUT);
pinMode(E, OUTPUT);
pinMode(F, OUTPUT);
pinMode(G, OUTPUT);
Serial.begin(9600);
Timer1.initialize(1000); // 1 ms
Timer1.attachInterrupt(ISR_Blink); // Configuramos la interrupción
A_val = 0;
}
void loop() {
const float BETA = 3950; // debe coincidir con el coeficiente beta del termistor
int analogValue = analogRead(TERMO);
float celsius = 1 / (log(1 / (1023. / analogValue - 1)) / BETA + 1.0 / 298.15) - 273.15;
// Imprime la temperatura en el monitor serial
Serial.print("Temperatura: ");
Serial.print(celsius);
Serial.println(" C");
pot_v = analogRead(POT);
A_val = map(pot_v, 0, 1023, 0, 5); // Mapea el valor del potenciómetro entre 0 y 5
switch (A_val) {
case 0:
if ((pot_v <= 204) && (t_enc < 3000)) {
t_enc++;
digitalWrite(LED, HIGH);
} else if (t_apag < 3000) {
t_apag++;
digitalWrite(LED, LOW);
} else {
t_enc = 0;
t_apag = 0;
}
break;
case 1:
if ((pot_v <= 408) && (t_enc < 2500)) {
t_enc++;
digitalWrite(LED, HIGH);
} else if (t_apag < 2500) {
t_apag++;
digitalWrite(LED, LOW);
} else {
t_enc = 0;
t_apag = 0;
}
break;
case 2:
if ((pot_v <= 612) && (t_enc < 2000)) {
t_enc++;
digitalWrite(LED, HIGH);
} else if (t_apag < 2000) {
t_apag++;
digitalWrite(LED, LOW);
} else {
t_enc = 0;
t_apag = 0;
}
break;
case 3:
if ((pot_v <= 816) && (t_enc < 1000)) {
t_enc++;
digitalWrite(LED, HIGH);
} else if (t_apag < 1000) {
t_apag++;
digitalWrite(LED, LOW);
} else {
t_enc = 0;
t_apag = 0;
}
break;
case 4:
if ((pot_v <= 1020) && (t_enc < 500)) {
t_enc++;
digitalWrite(LED, HIGH);
} else if (t_apag < 500) {
t_apag++;
digitalWrite(LED, LOW);
} else {
t_enc = 0;
t_apag = 0;
}
break;
}
}
void ISR_Blink() {
mostrarNumero(A_val);
}
void mostrarNumero(int dato) {
digitalWrite(A, HIGH);
digitalWrite(B, HIGH);
digitalWrite(C, HIGH);
digitalWrite(D, HIGH);
digitalWrite(E, HIGH);
digitalWrite(F, HIGH);
digitalWrite(G, HIGH);
if (dato == 0) {
digitalWrite(A, LOW);
digitalWrite(B, LOW);
digitalWrite(C, LOW);
digitalWrite(D, LOW);
digitalWrite(E, LOW);
digitalWrite(F, LOW);
}
if (dato == 1) {
digitalWrite(A, HIGH);
digitalWrite(B, LOW);
digitalWrite(C, LOW);
digitalWrite(D, HIGH);
digitalWrite(E, HIGH);
digitalWrite(F, HIGH);
digitalWrite(G, HIGH);
}
if (dato == 2) {
digitalWrite(A, LOW);
digitalWrite(B, LOW);
digitalWrite(C, HIGH);
digitalWrite(D, LOW);
digitalWrite(E, LOW);
digitalWrite(F, HIGH);
digitalWrite(G, LOW);
}
if (dato == 3) {
digitalWrite(A, LOW);
digitalWrite(B, LOW);
digitalWrite(C, LOW);
digitalWrite(D, LOW);
digitalWrite(E, HIGH);
digitalWrite(F, HIGH);
digitalWrite(G, LOW);
}
if (dato == 4) {
digitalWrite(A, HIGH);
digitalWrite(B, LOW);
digitalWrite(C, LOW);
digitalWrite(D, HIGH);
digitalWrite(E, HIGH);
digitalWrite(F, LOW);
digitalWrite(G, LOW);
}
if (dato == 5) {
digitalWrite(A, LOW);
digitalWrite(B, HIGH);
digitalWrite(C, LOW);
digitalWrite(D, LOW);
digitalWrite(E, HIGH);
digitalWrite(F, LOW);
digitalWrite(G, LOW);
}
}