Reset bit dentro de la funcion callback esp8622

-Hola a todos. Soy nuevo en el mundo de arduino, esp8622 ... vengo del mundo de los PLCs industriales, y mi nivel de C no es muy grande.
Estoy desarrollando un riego automático con varias wemos por mqtt a un servidor, controlado con node-red, con sondas de temperatura, bombas, medidor ph, etc.. y estoy programando la parte de riego por sonda de humedad. Para memorizar el primer pulso de la sonda de humedad en la tierra utilizo un bool, llamado regando1. y este se resetea después de recibir "regado" en la función void callback. Todo funciona perfectamente salvo que no resetea el bit regando1. Os dejo el programa .ino para que le echéis un ojo. Un saludo y muchas gracias

Control_Humedad_foro.ino (3.54 KB)

¿Está recibiendo "regado" o "Regado"?
Si es lo primero ese es el error, debería recibir lo segundo.

Al margen, códigos de hasta 9K se insertan como texto, no como adjuntos (ver Normas del foro, punto 7).

Saludos

Lo siento.Comparto programa en texto:
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <EEPROM.h>
#include <ESP8266mDNS.h>
#include <WiFiUdp.h>
#include <ArduinoOTA.h>

const char* ssid = "";
const char* password = "";
const char* mqttServer = "";
const int mqttPort = ;
const char* mqttUser = "";
const char* mqttPassword = "";

int P1 = D2;
int P2 = D1;
int P3 = D0;
int P4 = D3;
int P5 = D4;
int P6 = D5;
int P7 = D6;
int P8 = D7;
int P9 = D8;
bool Regando1 = false;

WiFiClient espClient;
PubSubClient client(espClient);
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// SETUP
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

void setup(){

pinMode(P1, INPUT);
pinMode(P2, INPUT);
pinMode(P3, INPUT);
pinMode(P4, INPUT);
pinMode(P5, INPUT);
pinMode(P6, INPUT);
pinMode(P7, INPUT);
pinMode(P8, INPUT);
pinMode(P9, INPUT);
Serial.begin(9600);

WiFi.mode(WIFI_STA); // Tipo de conexion
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.println("Conectando a WiFi..");
}
Serial.println("Conectado al wifi");
Serial.println();
Serial.print("IP: ");
Serial.println(WiFi.localIP());
Serial.println();
Serial.print("MAC: ");
Serial.println(WiFi.macAddress());
ArduinoOTA.begin();
client.setServer(mqttServer, mqttPort);
client.setCallback(callback);
//----------------------------------------------------------------------------------------------------------------------------------------
while (!client.connected()) {
Serial.println("conectando a MQTT...");

if (client.connect("Sondas", mqttUser, mqttPassword )) {

Serial.println("Conectado");
client.subscribe("Jardin/Riego/Planta1");

} else {

Serial.print("Fallo de conexion ");
Serial.print(client.state());
delay(2000);

}
}
}

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// RECIBIR MENSAJES
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

void callback(String topic, byte* payload, unsigned int length) {

String messageTemp;
for (int i = 0; i < length; i++)
messageTemp += (char)payload*;*

  • if(topic=="Jardin/Riego/Planta1"){*

  • if(messageTemp == "Regado"){*

  • Regando1 == false;*

  • Serial.println("RESET BIT¡¡");*

  • } }*

  • }*
    //BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB-----LOOP-----BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB

void loop() {

  • client.loop();*

  • ArduinoOTA.handle();*

  • bool Planta1 = digitalRead(P1);*

  • if (Planta1 && !Regando1) {*

  • client.publish("Jardin/Riego/Planta1", "Regar");*

  • Regando1 = true;*

  • Serial.println("SET BIT¡¡");*

  • }*

}

Lo que recibo de otra wemos es "Regado". esa parte esta bien, porque se ejecuta Serial.println("RESET BIT¡¡"); pero Regando1 no cambia a false

void callback(String topic, byte* payload, unsigned int length) {

String messageTemp;
for (int i = 0; i < length; i++)
messageTemp += (char)payload*;*

  • if(topic=="Jardin/Riego/Planta1"){*

  • if(messageTemp == "Regado"){*

  • Regando1 == false;*

  • Serial.println("RESET BIT¡¡");*

  • } }*

  • }*

Moderador
Hola, bienvenido al foro Arduino en Español

Por favor edita los 3 post usando etiquetas de código.
El primero porque tienes un código de menos de 9k y no se ve el código.
Los demás porque no se permite postearlos como has hecho, simple código copiado y pegado.

Normas del foro

Siempre digo que "Para esconder un elefante lo mejor es dejarlo a la vista..."

La asignación debe ser

Regando1 = false;

y no

Regando1 == false;

que es una igualdad (comparación).

Saludos

Disculpad las molestias. Muchas gracias por vuestra ayuda, la verdad es que aveces te centras mas en cualquier error que el mas obvio. cierro hilo. muchas gracias a todos

Y sí, dudé de "Regado" y no vi el verdadero error que estaba a la vista, nos pasa a todos.

Por favor editá el primer post y agrega "[SOLUCIONADO]" en el título. Y para ser prolijos, edita los otros para que el código quede como debe. Gracias

Ah, de nada.

Saludos

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.