#include <OneWire.h>#include <ShiftRegLCD.h>#include <DallasTemperature.h>#include "DHT.h"DeviceAddress AAA = {0x28, 0x5C, 0x87, 0xCC, 0x04, 0x00, 0x00, 0x62 };DeviceAddress vent = {0x28, 0x57, 0x61, 0xCC, 0x04, 0x00, 0x00, 0xDC };int SAR1=3;int vent1=6;int conteo=0;const byte dataPin = 11;const byte clockPin = 13;#define DHTPIN 10#define DHTTYPE DHT22DHT dht(DHTPIN, DHTTYPE);OneWire ds(9);OneWire oneWire(ds);DallasTemperature sensors(&oneWire);int numberOfDevices;ShiftRegLCD srlcd(dataPin, clockPin, TWO_WIRE ,2 );byte P100 [8] = {B00000,B00001,B00011,B00111,B01111,B11111,B11111,};byte P75 [8] = {B00000,B00000,B00010,B00110,B01110,B11110,B11110,};byte P50 [8] = {B00000,B00000,B00000,B00100,B01100,B11100,B11100,};byte P25 [8] = {B00000,B00000,B00000,B00000,B01000,B11000,B11000,};byte PO [8] = {B00000,B00000,B00000,B00000,B00000,B10000,B10000};byte CC [8] = {B10000,B00110,B01001,B01000,B01000,B01001,B00110,};byte CATENCION [8] = {B11111,B10101,B10101,B10101,B11111,B10101,B11111,};double puntoderocio(double celsius, double humidity){double a = 17.271;double b = 237.7;double temp = (a * celsius) / (b + celsius) + log(humidity/100);double Td = (b * temp) / (a - temp);return Td;}void setup() {Serial.begin(9600);srlcd.createChar(1,P100);srlcd.createChar(2,P75);srlcd.createChar(3,P50);srlcd.createChar(4,P25);srlcd.createChar(5,PO);srlcd.createChar(6,CC);srlcd.createChar(7,CATENCION);srlcd.backlightOn();srlcd.print("Cargando...");dht.begin();sensors.begin();sensors.setResolution(AAA, 12);sensors.setResolution(vent, 12);pinMode(SAR1,OUTPUT);pinMode(vent1,OUTPUT);numberOfDevices = sensors.getDeviceCount();}int printTemperature(DeviceAddress deviceAddress){float tempC = sensors.getTempC(deviceAddress);if (tempC == -127.00) {srlcd.print("");}else {srlcd.print((tempC),1);}}void loop() { int h = dht.readHumidity(); float t = dht.readTemperature(); sensors.requestTemperatures(); int SARA = sensors.getTempC(AAA); int ven = sensors.getTempC(vent); int A1=255, A2=192, A3=128, A4=64, A5=15, A6=0; int V1=0, V2=25, V3=75, V4=130, V5=180, V6=255; float DPT = (puntoderocio(t, h));{ byte i; byte present = 0; byte type_s; byte data[12]; byte addr[8]; float celsius; if ( !ds.search(addr)) { ds.reset_search(); delay(100); return; } if (OneWire::crc8(addr, 7) != addr[7]) { Serial.print("CRC is not valid!\n"); return; }ds.reset();ds.select(addr);ds.write(0x44,1); present = ds.reset();ds.select(addr); ds.write(0xBE);delay(100); unsigned int raw = (data[1] << 8) | data[0]; if (type_s) { raw = raw << 3; if (data[7] == 0x10) { raw = (raw & 0xFFF0) + 12 - data[6]; } } else { byte cfg = (data[4] & 0x60); if (cfg == 0x00) raw = raw << 3; else if (cfg == 0x20) raw = raw << 2; else if (cfg == 0x40) raw = raw << 1; }celsius = (float)raw / 16.0;sensors.requestTemperatures();if (digitalRead(12) == HIGH) {Serial.print(" Sensor 1: ");Serial.print(sensors.getTempC(AAA));Serial.print(" Ventilador: ");Serial.print(sensors.getTempC(vent));float h = dht.readHumidity();float t = dht.readTemperature();if (isnan(t) || isnan(h)) Serial.println("Sensor desconectado"); else srlcd.home(); srlcd.setCursor(0,0); srlcd.print("Temp "); srlcd.print(t,00); srlcd.write((byte)6); srlcd.setCursor(9,0); srlcd.print("Hum "); srlcd.print(h,00); srlcd.print("%"); srlcd.setCursor(0,1); srlcd.print("PC "); srlcd.print(puntoderocio(t, h)); srlcd.write((byte)6); Serial.print(" Hum: "); Serial.print(h); Serial.print("%\t"); Serial.print(" Temp: "); Serial.print(t); Serial.println("C"); Serial.print("PR ="); Serial.print(puntoderocio(t,h)); Serial.println("\260C"); delay(100);//Cinta calentadora inicioif (SARA == -127.00||SARA == 85){analogWrite (SAR1, A6);srlcd.setCursor(13,1);srlcd.print("X");srlcd.setCursor(0,1);srlcd.print("ERROR");Serial.println("Sensor issue");}else if (SARA <=DPT+3){analogWrite (SAR1, A1);srlcd.setCursor(13,1);srlcd.write((byte)1);Serial.println("Sensor 1 = 100%");}else if (SARA <=DPT+5){analogWrite (SAR1, A2);srlcd.setCursor(13,1);srlcd.write((byte)2);Serial.println("Sensor 1 = 75%");}else if (SARA <=DPT+7){analogWrite (SAR1, A3);srlcd.setCursor(13,1);srlcd.write((byte)3);Serial.println("Sensor 1 = 50%");}else if (SARA <=DPT+9){analogWrite (SAR1, A4);srlcd.setCursor(13,1);srlcd.write((byte)4);Serial.println("Sensor 1 = 25%");}else if (SARA <=DPT+11){analogWrite (SAR1,A5);srlcd.setCursor(13,1);srlcd.write((byte)5);Serial.println("Sensor 1 = 1%");}else if (SARA >=DPT+20){analogWrite (SAR1,A6);srlcd.setCursor(13,1);srlcd.write((byte)7);analogWrite(12,128);Serial.println("Sensor 1 *Sobrecalentamiento*");}else{analogWrite (SAR1, A6);srlcd.setCursor(13,1);srlcd.print("X");Serial.println("Sensor 1 OFF");}//Cinta calentadora finif (ven == -127.00||ven == 85){analogWrite (vent1, V1);srlcd.setCursor(14,1);srlcd.print("X");srlcd.setCursor(0,1);srlcd.print("ERROR");Serial.println("Ventilador error");}else if (ven <=vent1+10){analogWrite (vent1, V2);srlcd.setCursor(14,1);srlcd.write((byte)5);Serial.println("Ventilador = 10%");}else if (ven <=vent1+15){analogWrite (vent1, V3);srlcd.setCursor(14,1);srlcd.write((byte)4);Serial.println("Ventilador = 25%");}else if (ven <=vent1+20){analogWrite (vent1, V4);srlcd.setCursor(14,1);srlcd.write((byte)3);Serial.println("Ventilador = 50%");}else if (ven <=vent1+25){analogWrite (vent1, V5);srlcd.setCursor(14,1);srlcd.write((byte)2);Serial.println("Ventilador = 75%");}else if (ven <=vent1+30){analogWrite (vent1,V6);srlcd.setCursor(14,1);srlcd.write((byte)1);Serial.println("Ventilador = 100%");}else if (ven >=vent1+35){analogWrite (vent1,V6);srlcd.setCursor(14,1);srlcd.write((byte)7);analogWrite(12,128);Serial.println("Ventilador = 100%*");}else{analogWrite (vent1, V6);srlcd.setCursor(14,1);srlcd.write((byte)7);Serial.println("Ventilador = 100%**");}Serial.println(conteo);Serial.print("\n\r\n\r");conteo = conteo + 1;delay(500);}}}