#include <TimerOne.h> //codigo sensor de temperatura
// Definición de variables y constantes
const float BETA = 3950; // Coeficiente Beta del termistor
int valorAnalogico; // Valor leído en A0
float temperatura; // Temperatura en grados Celsius
// Pines del display de 7 segmentos
int pinA = 2;
int pinB = 3;
int pinC = 4;
int pinD = 5;
int pinE = 6;
int pinF = 7;
int pinG = 8;
int digito1 = 9; // Pin para el primer dígito del display (decenas)
int digito2 = 10; // Pin para el segundo dígito del display (unidades)
// Variables de control de tiempo
unsigned long tiempoUltimoCambio = 0;
const long intervaloDigitos = 50; // Intervalo para alternar entre los dígitos (en milisegundos)
int digitoActual = 1; // 1 para digito1
int valorDisplay[2]; // Almacena los valores de los dos dígitos
int A = 0; // Variable para la interrupción
void setup() {
Timer1.initialize(1000); // Inicializa Timer1 con un intervalo de 1000 microsegundos (1 ms)
Timer1.attachInterrupt(ISR_Blink); // Activa la interrupción y la asocia a ISR_Blink
// Configura los pines del display de 7 segmentos
pinMode(pinA, OUTPUT);
pinMode(pinB, OUTPUT);
pinMode(pinC, OUTPUT);
pinMode(pinD, OUTPUT);
pinMode(pinE, OUTPUT);
pinMode(pinF, OUTPUT);
pinMode(pinG, OUTPUT);
pinMode(digito1, OUTPUT);
pinMode(digito2, OUTPUT);
tiempoUltimoCambio = millis();
}
void ISR_Blink() {
noInterrupts(); // Suspende las interrupciones
A = 1; // Marca la variable para indicar que es momento de leer la temperatura
interrupts(); // Reautoriza las interrupciones
}
void loop() {
if (A == 1) {
A = 0; // Reinicia la variable para esperar a la próxima interrupción
// Lee el valor del sensor
valorAnalogico = analogRead(A0);
// Conversión del valor analógico a grados Celsius
temperatura = 1 / (log(1 / (1023.0 / valorAnalogico - 1)) / BETA + 1.0 / 298.15) - 273.15;
// Limitar la temperatura a un rango determinado (0 a 99)
if (temperatura < 0) { //igual en este sensor la temperatura maxima es 80°
temperatura = 0;
} else if (temperatura > 99) {
temperatura = 99;
}
// Separar la temperatura en dos dígitos
int temp = (int)temperatura;
valorDisplay[0] = temp / 10; // Decenas
valorDisplay[1] = temp % 10; // Unidades
}
// Alterna entre los dígitos a intervalos regulares
unsigned long tiempoActual = millis();
if (tiempoActual - tiempoUltimoCambio >= intervaloDigitos) {
tiempoUltimoCambio = tiempoActual;
// Alterna entre los dígitos manualmente
if (digitoActual == 1) {
digitoActual = 2;
} else {
digitoActual = 1;
}
actualizarDisplay();
}
}
void actualizarDisplay() {
// Apaga ambos dígitos // Ya no hace falta
//digitalWrite(digito1, LOW);
//digitalWrite(digito2, LOW);
// Activa el dígito correspondiente y muestra el número
if (digitoActual == 1) {
digitalWrite(digito2, LOW);
digitalWrite(digito1, LOW);
digitalWrite(pinA, HIGH);
digitalWrite(pinB, HIGH);
digitalWrite(pinC, HIGH);
digitalWrite(pinD, HIGH);
digitalWrite(pinE, HIGH);
digitalWrite(pinF, HIGH);
digitalWrite(pinG, HIGH); // Lo uso para eliminar residuos
digitalWrite(digito1, HIGH);
mostrarNumero(valorDisplay[0]);
} else {
digitalWrite(digito1, LOW);
digitalWrite(digito2, LOW);
digitalWrite(digito1, LOW);
digitalWrite(pinA, HIGH);
digitalWrite(pinB, HIGH);
digitalWrite(pinC, HIGH);
digitalWrite(pinD, HIGH);
digitalWrite(pinE, HIGH);
digitalWrite(pinF, HIGH);
digitalWrite(pinG, HIGH); // Lo uso para eliminar residuos
digitalWrite(digito2, HIGH);
mostrarNumero(valorDisplay[1]);
}
}
void mostrarNumero(int dato) {
// Controla los segmentos del display según el dato
if (dato == 0) {
digitalWrite(pinA, LOW);
digitalWrite(pinB, LOW);
digitalWrite(pinC, LOW);
digitalWrite(pinD, LOW);
digitalWrite(pinE, LOW);
digitalWrite(pinF, LOW);
digitalWrite(pinG, HIGH); // Número 0
} else if (dato == 1) {
digitalWrite(pinA, HIGH);
digitalWrite(pinB, LOW);
digitalWrite(pinC, LOW);
digitalWrite(pinD, HIGH);
digitalWrite(pinE, HIGH);
digitalWrite(pinF, HIGH);
digitalWrite(pinG, HIGH); // Número 1
} else if (dato == 2) {
digitalWrite(pinA, LOW);
digitalWrite(pinB, LOW);
digitalWrite(pinC, HIGH);
digitalWrite(pinD, LOW);
digitalWrite(pinE, LOW);
digitalWrite(pinF, HIGH);
digitalWrite(pinG, LOW); // Número 2
} else if (dato == 3) {
digitalWrite(pinA, LOW);
digitalWrite(pinB, LOW);
digitalWrite(pinC, LOW);
digitalWrite(pinD, LOW);
digitalWrite(pinE, HIGH);
digitalWrite(pinF, HIGH);
digitalWrite(pinG, LOW); // Número 3
} else if (dato == 4) {
digitalWrite(pinA, HIGH);
digitalWrite(pinB, LOW);
digitalWrite(pinC, LOW);
digitalWrite(pinD, HIGH);
digitalWrite(pinE, HIGH);
digitalWrite(pinF, LOW);
digitalWrite(pinG, LOW); // Número 4
} else if (dato == 5) {
digitalWrite(pinA, LOW);
digitalWrite(pinB, HIGH);
digitalWrite(pinC, LOW);
digitalWrite(pinD, LOW);
digitalWrite(pinE, HIGH);
digitalWrite(pinF, LOW);
digitalWrite(pinG, LOW); // Número 5
} else if (dato == 6) {
digitalWrite(pinA, LOW);
digitalWrite(pinB, HIGH);
digitalWrite(pinC, LOW);
digitalWrite(pinD, LOW);
digitalWrite(pinE, LOW);
digitalWrite(pinF, LOW);
digitalWrite(pinG, LOW); // Número 6
} else if (dato == 7) {
digitalWrite(pinA, LOW);
digitalWrite(pinB, LOW);
digitalWrite(pinC, LOW);
digitalWrite(pinD, HIGH);
digitalWrite(pinE, HIGH);
digitalWrite(pinF, HIGH);
digitalWrite(pinG, HIGH); // Número 7
} else if (dato == 8) {
digitalWrite(pinA, LOW);
digitalWrite(pinB, LOW);
digitalWrite(pinC, LOW);
digitalWrite(pinD, LOW);
digitalWrite(pinE, LOW);
digitalWrite(pinF, LOW);
digitalWrite(pinG, LOW); // Número 8
} else if (dato == 9) {
digitalWrite(pinA, LOW);
digitalWrite(pinB, LOW);
digitalWrite(pinC, LOW);
digitalWrite(pinD, LOW);
digitalWrite(pinE, HIGH);
digitalWrite(pinF, LOW);
digitalWrite(pinG, LOW); // Número 9
}
}