1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85 | #include <Wire.h> // requerido para dispositivos I2C
#include <Adafruit_GFX.h> // libraría Adafruit
#include <Adafruit_SSD1306.h> // driver para SSD1306
#define OLED_RESET 4 // pin de reset
Adafruit_SSD1306 display(OLED_RESET);
// definir pin analogico al que va conectado LM35
#define LM35_pin A0
const int buzzer=12;
volatile int press_sw=0;
void setup(void){
Serial.begin(9600);
delay(1000); // esperar un segundo
DDRB=0x10;//buzzer como salida
DDRD=0x0;
PORTD=0x4;
//Interrupt settings
EIMSK = 0;
EICRA = 0;
EIMSK = 0b11;//habilitación
EICRA = 0b1111;//INT0 e INT1 en rising
sei();//habilitar interrupciones globales
analogReference(INTERNAL); // setear voltaje positivo para 1.1V
// inicializar SSD1306 con dirección I2C = 0x3D
display.begin(SSD1306_SWITCHCAPVCC, 0x3D);
// vaciar SSD1306 buffer.
display.clearDisplay();
display.setTextSize(1); // tamaño del texto = 1
display.setTextColor(WHITE, BLACK); // setear color texto a fondo blanco y negro
display.setCursor(15, 0); // mover cursor a la posición (15, 0) pixel
display.print("Temperatura corporal:");
display.display(); // actualizar SSD1306
display.setTextSize(2); // tamaño del texto = 2
}
int tCelsius;
char _buffer[8];
void loop(){
if(press_sw==1){
// leear voltaje analógico
// 9.3 = 1023/(1.1*100)
tCelsius = (5.0 * analogRead(LM35_pin) * 100.0)/1024.0;
// imprimir temperatura en grados celcios
if(tCelsius>=38.0){
delay(500);
alarma();
sprintf(_buffer, "%.1s C", tCelsius);
}
if(tCelsius<=35.0){
delay(500);
alarma();
sprintf(_buffer, "%.1s C", tCelsius);
}else{
delay(500);
sprintf(_buffer, "%.1s C", tCelsius);
}
display.setCursor(23, 10);
display.print(_buffer);
// print degree symbols ( ° )
display.drawCircle(88, 12, 2, WHITE);
// actualzar el display
display.display();
delay(1000); // esperar un segundo
}
}
ISR(INT0_vect){
press_sw++;
}
void alarma(){
digitalWrite(buzzer,LOW);
delay(2000);
digitalWrite(buzzer,HIGH);
delay(2000);
}
|