#include #include #include #include "MqttDefines.h" #include "MqttUtiles.h" #include "MqttVarManager.h" #include "LcdMQTTViewer.h" void LcdMQTTViewer::envia(char* txt, int pos, int line) { lcd->setCursor(pos, line); int l = strlen(txt); if (l < nchar) for (int i = l; i < nchar; i++) txt[i] = ' '; txt[nchar] = 0; lcd->print(txt); } LcdMQTTViewer::LcdMQTTViewer() { ivarBuzzer=-1; topic[0]=0; maxpan = 0; tiempo = 0; incre_t = 10 * 1000; for (int i = 0; i < MAXINFOLCD; i++) { LcdConf[i].ivar=-1; LcdConf[i].formatLCD[0] = 0; LcdConf[i].pan = 255; } } void LcdMQTTViewer::setTimer(int seg) { incre_t = seg * 1000; } void LcdMQTTViewer::envia(int pan) { char val[16]; char buf[32]; for (int i = 0; i < maxtInfo; i++) { if (LcdConf[i].pan != pan) continue; if(LcdConf[i].ivar>=0) { MqttVar *v=vars->Get(LcdConf[i].ivar); if(v==NULL) continue; //pilla valor if(v->flags & MqttVar::FLOAT_VAR) dtostrf(v->val.f,3, 2, val); else sprintf(val, "%d", (int)v->val.i); sprintf(buf, LcdConf[i].formatLCD, val); } else strcpy( buf, LcdConf[i].formatLCD); envia(buf,0, LcdConf[i].line); } } void LcdMQTTViewer::inicia(MqttVarManager *v, LiquidCrystal* lcdEx, int digi, int lines,int ibuz) { ivarBuzzer=(byte)ibuz; vars=v; lcd =lcdEx; nchar = digi; lcd->begin(nchar, lines); nlineslcd=lines; for(int i=0; i= MAXINFOLCD) return; LcdConf[maxtInfo].ivar=ivar; strcpy(LcdConf[maxtInfo].formatLCD, formatLCD); LcdConf[maxtInfo].line = line; LcdConf[maxtInfo].pan = pan; maxtInfo++; //recalcula numero de pantallas if (maxpan < pan) maxpan = pan; } int LcdMQTTViewer::OnMqtt(char* top, char* payload) { if(strcmp(top,topic)) return -1; int i=0; int lin=0; int n=0; char buf[64]; char imelod[12]; int nmelod; bool melodia=false; while(payload[i]) { if(payload[i]=='\n') { i++; buf[n]=0; envia(buf,0,lin); lin++; n=0; } else if(payload[i]=='$') { if(melodia) { imelod[nmelod]=0; melodia=false; MQTTvalor v; v.i=atoi(imelod); if(ivarBuzzer>=0) vars->SetVal(ivarBuzzer,v); } else { nmelod=0; melodia=true; } i++; } else { if(melodia) imelod[nmelod++]=payload[i++]; else buf[n++]=payload[i++]; } } buf[n]=0; envia(buf,0,lin); lin++; for(; linsubscribe(topic); }