#include <TimerOne.h>
#define TERMO A1
int t = 0;
int dec;
int uni;
int decimal;
int X = 0;
int temp;
// Pines para los segmentos A-G del display de 7 segmentos
#define dig1 9
#define dig2 10
#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
void setup() {
pinMode(A, OUTPUT);
pinMode(B, OUTPUT);
pinMode(C, OUTPUT);
pinMode(D, OUTPUT);
pinMode(E, OUTPUT);
pinMode(F, OUTPUT);
pinMode(G, OUTPUT);
pinMode(dig1, OUTPUT);
pinMode(dig2, OUTPUT);
digitalWrite(dig1, HIGH);
digitalWrite(dig1, HIGH);
Timer1.initialize(10000); // 10 ms
Timer1.attachInterrupt(ISR_Blink); // Configuramos la interrupción
Serial.begin(9600);
}
void ISR_Blink() { //esta es la interrupción, primero desactivo las interrupciones coloco la variable A en 1, que luego me //va a permitir desbloquear el loop.
noInterrupts(); // Suspende las interrupciones
X = 1; //
interrupts(); // Autoriza las interrupciones
}
void loop() { // En el loop coloco un condicional para que solo recorra el còdigo si la variable A==1 , la interrupciòn de //timer me coloca A=1 cada 1 ms
if (X == 1) { //
X = 0; //ni bien paso el condicional, coloco la variable A=0
t++;
if (t <= 50) {
digitalWrite(dig2, LOW);
digitalWrite(dig1, HIGH);
disp(dec);
digitalWrite(A, HIGH);
digitalWrite(B, HIGH);
digitalWrite(C, HIGH);
digitalWrite(D, HIGH);
digitalWrite(E, HIGH);
digitalWrite(F, HIGH);
digitalWrite(G, HIGH);
}
else {
digitalWrite(dig2, HIGH);
digitalWrite(dig1, LOW);
disp(uni);
digitalWrite(A, HIGH);
digitalWrite(B, HIGH);
digitalWrite(C, HIGH);
digitalWrite(D, HIGH);
digitalWrite(E, HIGH);
digitalWrite(F, HIGH);
digitalWrite(G, HIGH);
if (t = 500) { // El sensor leera cada 500 ms
temp = analogRead(A1);
const float BETA = 3950; // debe coincidir con el coeficiente beta del termistor
float celsius = 1 / (log(1 / (1023. / temp - 1)) / BETA + 1.0 / 298.15) - 273.15;
// Imprime la temperatura en el monitor serial
Serial.print("Temperatura: ");
Serial.print(celsius);
Serial.println(" °c");
dec = celsius / 10;
uni = celsius - (dec * 10);
}
}
}
}
void disp (int dato) {
digitalWrite(A, LOW);
digitalWrite(B, LOW);
digitalWrite(C, LOW);
digitalWrite(D, LOW);
digitalWrite(E, LOW);
digitalWrite(F, LOW);
digitalWrite(G, LOW);
if (dato == 0) {
digitalWrite(A, HIGH);
digitalWrite(B, HIGH);
digitalWrite(C, HIGH);
digitalWrite(D, HIGH);
digitalWrite(E, HIGH);
digitalWrite(F, HIGH);
digitalWrite(G, LOW);
}
if (dato == 1) {
digitalWrite(A, LOW);
digitalWrite(B, HIGH);
digitalWrite(C, HIGH);
digitalWrite(D, LOW);
digitalWrite(E, LOW);
digitalWrite(F, LOW);
digitalWrite(G, LOW);
}
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);
}
if (dato == 6) {
digitalWrite(A, LOW);
digitalWrite(B, HIGH);
digitalWrite(C, LOW);
digitalWrite(D, LOW);
digitalWrite(E, LOW);
digitalWrite(F, LOW);
digitalWrite(G, LOW);
}
if (dato == 7) {
digitalWrite(A, LOW);
digitalWrite(B, LOW);
digitalWrite(C, LOW);
digitalWrite(D, HIGH);
digitalWrite(E, HIGH);
digitalWrite(F, HIGH);
digitalWrite(G, HIGH);
}
if (dato == 8) {
digitalWrite(A, LOW);
digitalWrite(B, LOW);
digitalWrite(C, LOW);
digitalWrite(D, LOW);
digitalWrite(E, LOW);
digitalWrite(F, LOW);
digitalWrite(G, LOW);
}
if (dato == 9) {
digitalWrite(A, LOW);
digitalWrite(B, LOW);
digitalWrite(C, LOW);
digitalWrite(D, LOW);
digitalWrite(E, HIGH);
digitalWrite(F, LOW);
digitalWrite(G, LOW);
}
}