From 6dfafd13902ba86c5fb4827c4dd9e2c2069ab5ff Mon Sep 17 00:00:00 2001 From: Gerardo Date: Tue, 1 Oct 2024 09:19:01 +0200 Subject: [PATCH] evitar efecto rebote --- DomoEspSensor/SensorDout.h | 2 +- DomoEspSensor/SensorPulsante.h | 27 +++++++++++++++++++++++---- 2 files changed, 24 insertions(+), 5 deletions(-) diff --git a/DomoEspSensor/SensorDout.h b/DomoEspSensor/SensorDout.h index 1277367..e026275 100644 --- a/DomoEspSensor/SensorDout.h +++ b/DomoEspSensor/SensorDout.h @@ -66,7 +66,7 @@ bool negado; val=!val; else val=(atoi(payload)==1); - //cambia estado relle + //cambia estado relleH if(negado) digitalWrite(pin, val==0); else diff --git a/DomoEspSensor/SensorPulsante.h b/DomoEspSensor/SensorPulsante.h index 5bb9da1..6ae00a5 100644 --- a/DomoEspSensor/SensorPulsante.h +++ b/DomoEspSensor/SensorPulsante.h @@ -7,14 +7,19 @@ class SensorPulsante: public DomoEspSensorReceiver bool val; bool valDef; uint8_t pin; - + unsigned long tiempo_sens; + unsigned long incre_tsens; + bool espera; public: virtual float getVal() { return (float)val; } SensorPulsante() - {} + { + espera=false; + incre_tsens=500; + } void set(uint8_t _pin, char* topic_id, bool _valDef) { pin=_pin; @@ -22,10 +27,21 @@ class SensorPulsante: public DomoEspSensorReceiver val=valDef; strcpy(topic, topic_id); } + void setIncremento(int milis) + { + incre_tsens=milis; + } + virtual void procesa(IMqttManager * man, int tiempo) { //mirar para configurar por interrupcion - int val_ac=digitalRead(pin); + int val_ac=valDef; + if(!espera || MqttUtiles::pasa_incre(&tiempo_sens, incre_tsens)) + { + val_ac=digitalRead(pin); + espera=false; + } + if(val_ac!=val && val_ac!=valDef) { @@ -36,7 +52,10 @@ class SensorPulsante: public DomoEspSensorReceiver sprintf(buffer_p, "%d", (int)val_ac); sprintf(buffer_t, "%s/pul",topic); man->MqttSend(buffer_t, buffer_p); - delay(100); + //delay(100); + MqttUtiles::reinicia_incre(&tiempo_sens, incre_tsens); + espera=true; + } val=val_ac; }