#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
// Definir el pin del sensor NTC y la pantalla OLED
#define ntc_pin 34 // Usaremos el pin GPIO 34 del ESP32 para la entrada analógica
#define DIS_WIDTH 128
#define DIS_HEIGHT 64
#define IMG_WIDTH 8
#define IMG_HEIGHT 8
#define OLED_RESET -1
#define I2C_SDA 21 // Pin SDA para I2C en ESP32
#define I2C_SCL 22 // Pin SCL para I2C en ESP32
Adafruit_SSD1306 display(DIS_WIDTH, DIS_HEIGHT, &Wire, OLED_RESET);
// Variables para el termistor
const float coeficiente = 3950; // Coeficiente del termistor
const float resistencia_serie = 10000; // Resistencia en serie con el termistor
const float resistencia_nominal = 10000; // Resistencia nominal a 25 grados C
const float temperatura_nominal = 25; // Temperatura nominal
const float temperatura_umbral= 30; // Umbral de temperatura en grados Celsius
// Imagen a mostrar
static const unsigned char PROGMEM epd_bitmap [] = {
0x3c, 0x42, 0xa9, 0x85, 0xa5, 0x99, 0x42, 0x3c
};
void showWelcomeMessage() {
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0, 0);
display.println("Bienvenidos a");
display.println("Sistemas de Control");
display.println("DAC-ADC");
display.display();
//
delay(500);
}
void setup() {
Serial.begin(9600);
// Iniciar la comunicación I2C con los pines definidos
Wire.begin(I2C_SDA, I2C_SCL);
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 está fallando"));
for (;;); // No proceder, hacer un bucle infinito
}
delay(500);
// Mostrar la imagen al inicio
int xOffset = (DIS_WIDTH - IMG_WIDTH) / 2;
int yOffset = (DIS_HEIGHT - IMG_HEIGHT) / 2 + 10; // Mueve la imagen 10 píxeles hacia abajo
display.clearDisplay();
display.drawBitmap(xOffset, yOffset, epd_bitmap, IMG_WIDTH, IMG_HEIGHT, WHITE);
display.display();
delay(500); // Pausa de 2 segundos antes de mostrar el mensaje de bienvenida
// Mostrar el mensaje de bienvenida
showWelcomeMessage();
}
void loop() {
int analogValue = analogRead(ntc_pin);
float resistance = resistencia_serie/ ((4095.0 / analogValue) - 1.0);
float temperature = 1.0 / (log(resistance / resistencia_nominal) / coeficiente + 1.0 / (temperatura_nominal + 273.15)) - 273.15;
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.println(" C");
if (temperature >= temperatura_umbral) {
displayImage();
} else {
display.clearDisplay();
display.display();
}
delay(500);
}
void displayImage() {
int xOffset = (DIS_WIDTH - IMG_WIDTH) / 2;
int yOffset = (DIS_HEIGHT - IMG_HEIGHT) / 2;
display.clearDisplay();
display.drawBitmap(xOffset, yOffset, epd_bitmap, IMG_WIDTH, IMG_HEIGHT, WHITE);
display.display();
}