From f4102900f2d2a378a61422ad0f833a68ecc9a179 Mon Sep 17 00:00:00 2001 From: Gerardo Date: Fri, 27 Sep 2024 23:19:14 +0200 Subject: [PATCH] =?UTF-8?q?A=C3=B1adido=20sensor=20lcd=20y=20config=20desp?= =?UTF-8?q?acho?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DomoEspSensor/Automatismos.h | 1 + DomoEspSensor/SensorLcd.h | 195 ++++++++++++++++++++++++++++ DomoEspSensor/configuracionActual.h | 57 +++++++- DomoEspSensor/defines.h | 5 +- 4 files changed, 254 insertions(+), 4 deletions(-) create mode 100644 DomoEspSensor/SensorLcd.h diff --git a/DomoEspSensor/Automatismos.h b/DomoEspSensor/Automatismos.h index 61fc574..2a54948 100644 --- a/DomoEspSensor/Automatismos.h +++ b/DomoEspSensor/Automatismos.h @@ -9,6 +9,7 @@ #include "SensorVF.h" #include "SensorRF.h" #include "SensorTimer.h" +#include "SensorLcd.h" #include "Actuador.h" //---------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/DomoEspSensor/SensorLcd.h b/DomoEspSensor/SensorLcd.h new file mode 100644 index 0000000..bc4a235 --- /dev/null +++ b/DomoEspSensor/SensorLcd.h @@ -0,0 +1,195 @@ +#ifndef SensorLcdDef +#define SensorLcdDef 1 +#include "defines.h" +#include + +#define MAX_SENS_PAN 2 +class PantallaLcd +{ + public: + PantallaLcd() + { + msg[0]=0; + } + char msg[MAX_CHAR_PAN_LCD]; + DomoEspSensorReceiver* sen[MAX_SENS_PAN]; +}; + + +//sensor virtual +class SensorLcd : public DomoEspSensorReceiver +{ + float val; + LiquidCrystal *lcd; + int nchar; + int nlin; + int npan; + int apan; + unsigned long tiempo_sens; + unsigned long incre_tsens; + + + PantallaLcd pan[MAX_PAN_LCD]; +public: + SensorLcd() + { + val = 0; + topic[0] = 0; + lcd = 0; + npan=0; + apan=0; + + } + void set(char* topic_id, LiquidCrystal * _lcd, int _nchar, int lineas, int seg) + { + val = 0; + strcpy(topic, topic_id); + lcd = _lcd; + incre_tsens = 1000 * seg; + nchar = _nchar; + nlin = lineas; + + } + void AddPan(char* msg, DomoEspSensorReceiver *sen1=0, DomoEspSensorReceiver *sen2=0) + { + if(npanbegin(nchar, nlin); + MqttUtiles::reinicia_incre(&tiempo_sens, incre_tsens); + } + + virtual void procesa(IMqttManager* man, int tiempo) + { + if(MqttUtiles::pasa_incre(&tiempo_sens, incre_tsens)) + { + apan=(apan+1)%npan; + muestraPan(); + } + } + + virtual void SubscribeMqtt(IMqttManager* man) { + //char buffer_t[MAXTOPICVAR]; + sprintf(buffer_t, "%s/set", topic); + man->MqttSubs(buffer_t); + } + virtual void OnMqtt(IMqttManager* man, char* _topic, char* payload, int tipo) + { + if (tipo != Topic::SET) + return; + if (!strcmp(_topic, topic)) + { + Muestra(payload); + MqttUtiles::reinicia_incre(&tiempo_sens, incre_tsens); + } + + } + + + +private: + void muestraPan() + { + if(npan<=0) + return; + #ifdef DEBUG_PS + Serial.println("SenLcd muestraPan:"); + Serial.println(apan); + #endif + char msg[MAX_CHAR_PAN_LCD]; + char val1[6]; + char val2[6]; + + if(pan[apan].sen[0]) + dtostrf(pan[apan].sen[0]->getVal(),3, 2, val1); + if(pan[apan].sen[0]) + dtostrf(pan[apan].sen[1]->getVal(),3, 2, val2); + + sprintf(msg, pan[apan].msg, val1,val2); + Muestra(msg); + + } + void Muestra(char * txt) + { + #ifdef DEBUG_PS + Serial.println("SenLcd muestra: "); + Serial.println(txt); + #endif + int linea=0; + int i=0; + char* ini=txt; + bool sigue=true; + while(sigue && linea nchar) + nStr= nchar; + + + + for (int i = 0; i < nchar; i++) + if (i < nStr) + buf[i] = txt[i]; + else + buf[i] = ' '; + + buf[nchar] = 0; + #ifdef DEBUG_PS + Serial.println("SenLcd muestraFin: "); + Serial.println(buf); + #endif + lcd->setCursor(0, linea); + lcd->print(buf); + } +}; + +#endif \ No newline at end of file diff --git a/DomoEspSensor/configuracionActual.h b/DomoEspSensor/configuracionActual.h index 9fe4a31..32bf77d 100644 --- a/DomoEspSensor/configuracionActual.h +++ b/DomoEspSensor/configuracionActual.h @@ -92,8 +92,63 @@ class ConfActual: public DomoEspConfig } }; +class Confdespacho: public DomoEspConfig +{ + SensorDHT dht; + SensorAin nivelLuz; + SensorLcd senlcd; + + SensorRF tcocina; + SensorRF hcocina; + SensorRF tdesp; + SensorRF hdesp; + SensorRF tsal; + SensorRF hsal; + LiquidCrystal lcd{D5,D6,D3,D2,D1,D0}; + + public: + Confdespacho() + { + + strcpy(ssidWifi,"IdhunAux");//nombre wifi + strcpy(ideEsp,"Esp8266_Despacho");//idenitificador del esp (sera Ășnico) + + dht.set(D4, "casa/desp"); + nivelLuz.set(0,"casa/desp/luz",0, 0); + + senlcd.set("casa/desp/lcd", &lcd, 16,2, 7); + tcocina.set("casa/cocina/t"); + hcocina.set("casa/cocina/h"); + tsal.set("casa/Salon/t"); + hsal.set("casa/Salon/h"); + tdesp.set("casa/desp/t"); + hdesp.set("casa/desp/h"); + senlcd.AddPan("T cocina: %s\nH cocina: %s",&tcocina, &hcocina); + senlcd.AddPan("T desp: %s\nH desp: %s",&tdesp, &hdesp); + senlcd.AddPan("T salon: %s\nH salon: %s",&tsal, &hsal); + + } + virtual void inicia(ISensorManager* man) + { + man->Add(&dht); + man->Add(&nivelLuz); + man->Add(&senlcd); + + man->Add(&tcocina); + man->Add(&hcocina); + + man->Add(&tdesp); + man->Add(&hdesp); + + man->Add(&tsal); + man->Add(&hsal); -ConfActual ConfiguracionActual; + + } + +}; + +Confdespacho ConfiguracionActual; #endif \ No newline at end of file diff --git a/DomoEspSensor/defines.h b/DomoEspSensor/defines.h index 30e28f4..e721573 100644 --- a/DomoEspSensor/defines.h +++ b/DomoEspSensor/defines.h @@ -2,11 +2,10 @@ #define DefinesDef 1 #define DEBUG_PS 1 -#define CON_WOL 0 -#define CON_LCD 0 #define MAXTOPICVAR 32//maximo de caracteres de los topic de las variables - +#define MAX_CHAR_PAN_LCD 35//MAXIMO DE CARACTRES POR PANTALLA LCD +#define MAX_PAN_LCD 3//MAXIMO DE PANTALLAS POR SENSOR LCD //vars-------------------- #define MAXSTR 2024//maximo de caracteres para str