#include <DHT.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Fonts/FreeMono9pt7b.h>
//Pines Digitales
const int SENSOR_DHT_PIN = 13; //in
const int VENTILADOR_PIN = 8; //out
const int CALOR_PIN = 7; //out
//Pines Analógicos
const int POT_SETPOINT_PIN = A0; //in
const int POT_MARGEN_PIN = A1; //in
//Variables y/o valores iniciales
int ANALOG_SETPOINT = 0;
int ANALOG_SETPOINT_MAP = 0;
float VALOR_SETPOINT_TEMPERATURA = 0;
int ANALOG_MARGEN = 0;
int ANALOG_MARGEN_MAP = 0;
float VALOR_MARGEN_TEMPERATURA = 0;
float TEMPERATURA;
float HUMEDAD;
#define ANCHO_PANTALLA 128 // Ancho de la pantalla OLED
#define ALTO_PANTALLA 64 // Alto de la pantalla OLED
#define OLED_RESET -1 // Pin reset incluido en algunos modelos de pantallas (-1 si no disponemos de pulsador).
#define DIRECCION_PANTALLA 0x3C //Dirección de comunicacion: 0x3D para 128x64, 0x3C para 128x32
Adafruit_SSD1306 display(ANCHO_PANTALLA, ALTO_PANTALLA, &Wire, OLED_RESET);
DHT dht(SENSOR_DHT_PIN, DHT22);
void setup() {
// put your setup code here, to run once:
pinMode(VENTILADOR_PIN, OUTPUT);
pinMode(CALOR_PIN, OUTPUT);
digitalWrite(VENTILADOR_PIN, LOW);
digitalWrite(CALOR_PIN, LOW);
Serial.begin(9600);
dht.begin();
if(!display.begin(SSD1306_SWITCHCAPVCC, DIRECCION_PANTALLA)) {
Serial.println(F("Fallo en la asignacion de SSD1306"));
}
display.clearDisplay();
display.setTextSize(4);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println("XD");
display.display();
display.clearDisplay();
delay(1000);
}
void loop() {
// put your main code here, to run repeatedly:
TEMPERATURA = dht.readTemperature();
HUMEDAD = dht.readHumidity();
//###################################################
ANALOG_SETPOINT = analogRead(POT_SETPOINT_PIN);
ANALOG_SETPOINT_MAP = map(ANALOG_SETPOINT, 0, 1023, 1000, 5000);
VALOR_SETPOINT_TEMPERATURA = ANALOG_SETPOINT_MAP/100.00;
//###################################################
ANALOG_MARGEN = analogRead(POT_MARGEN_PIN);
ANALOG_MARGEN_MAP = map(ANALOG_MARGEN, 0, 1023, 0, 1000);
VALOR_MARGEN_TEMPERATURA = ANALOG_MARGEN_MAP/100.00;
//###################################################
if (TEMPERATURA <= (VALOR_SETPOINT_TEMPERATURA - VALOR_MARGEN_TEMPERATURA)){
digitalWrite(CALOR_PIN, HIGH);
}
else if (TEMPERATURA >= (VALOR_SETPOINT_TEMPERATURA + VALOR_MARGEN_TEMPERATURA)){
digitalWrite(VENTILADOR_PIN, HIGH);
}
else if (TEMPERATURA <= VALOR_SETPOINT_TEMPERATURA) {
digitalWrite(VENTILADOR_PIN, LOW);
}
else if (TEMPERATURA >= VALOR_SETPOINT_TEMPERATURA) {
digitalWrite(CALOR_PIN, LOW);
}
mostrar_display();
}
void mostrar_display(){
display.clearDisplay();
display.setTextSize(3);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.print(TEMPERATURA,1); display.cp437(true); display.write(167); display.print("C");
display.setCursor(0,20);
display.print(HUMEDAD,1); display.print("%");
display.display();
display.clearDisplay();
}
void mostrar_serial(){
Serial.print("Tem: "); Serial.print(TEMPERATURA); Serial.println("°C");
Serial.print("Hum: "); Serial.print(HUMEDAD); Serial.println("%");
Serial.print("Set: "); Serial.print(VALOR_SETPOINT_TEMPERATURA); Serial.println("°C");
Serial.print("M-m: "); Serial.print("±"); Serial.print(VALOR_MARGEN_TEMPERATURA); Serial.println("°C\n");
delay(100);
}