Ayuda con sensor ultrasónico, sensor de temperatura y humedad i blynk

Hola, tengo este programa, es para un sensor ultrasónico conectado con Blynk, que si detecta una distancia mayor a la debida se envía una notificación y un E-mail. Funciona bien, todo se cumple, pero en la parte de if, se envían notificaciones ilimitadas, ¿hay alguna manera de hacer que solo envíe una y pasado un tiempo vulva a notificarme si la distancia sigue siendo mayor a la indicada?, todo esto mientras sigue mostrando en la pantalla de Blynk la distancia en tiempo real. También, al mismo tiempo, cuando el sensor ultrasónico no registra una medida mayor a la dicha (lo normal), el sensor de temperatura y humedad no registra nada, es como si se parara… En cambio, cuando el ultrasónico mide más de lo debido y envía unas notificaciones, el sensor de humedad, empieza a funcionar. Si alguien me puede ayudar estaré muy agradecido, por cierto el sensor de temperatura y humedad es un DHT11 y el ultrasónico es el HC-SR04. Aquí mi código, gracias:

#define BLYNK_PRINT Serial
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <DHT.h>
#define DHTPIN 2          // What digital pin we're connected to


#define DHTTYPE DHT11     // DHT 11
DHT dht(DHTPIN, DHTTYPE);
BlynkTimer timer;


void sendSensor()
{
  float h = dht.readHumidity();
  float t = dht.readTemperature(); // or dht.readTemperature(true) for Fahrenheit

  if (isnan(h) || isnan(t)) {
    Serial.println("Failed to read from DHT sensor!");
    return;
  }
  // You can send any value at any time.
  // Please don't send more that 10 values per second.
  Blynk.virtualWrite(V7, h);
  Blynk.virtualWrite(V6, t);
 // /pin.##/
}

const int triggerPin = 5;
const int echo = 4;

long duration;
int distance;

char auth[] = "**********";
char ssid[] = "**********";
char pass[] = "**********";

WidgetLED led1(V1);


// V1 LED Widget is blinking
void blinkLedWidget()
{
  if (led1.getValue()) {
    led1.off();
    Serial.println("LED on V1: off");
  } else {
    led1.on();
    Serial.println("LED on V1: on");
    
  }
}

void setup(){
  Serial.begin(9600);
  Blynk.begin(auth, ssid, pass);
  pinMode(triggerPin, OUTPUT); // Sets the trigPin as an Output
  pinMode(echo, INPUT); // Sets the echoPin as an Input
  {
  // Debug console
  Serial.begin(9600);

  Blynk.begin(auth, ssid, pass);
  // You can also specify server:
  //Blynk.begin(auth, ssid, pass, "blynk-cloud.com", 80);
  //Blynk.begin(auth, ssid, pass, IPAddress(192,168,1,100), 8080);

  timer.setInterval(1000L, blinkLedWidget);
}
{
  // Debug console
  Serial.begin(9600);

  Blynk.begin(auth, ssid, pass);
  // You can also specify server:
  //Blynk.begin(auth, ssid, pass, "blynk-cloud.com", 80);
  //Blynk.begin(auth, ssid, pass, IPAddress(192,168,1,100), 8080);
  
  dht.begin();
  // Setup a function to be called every second
  timer.setInterval(1000L, sendSensor);

}
}
void loop(){
  Blynk.run();
  digitalWrite(triggerPin, LOW);
  delayMicroseconds(2);
  digitalWrite(triggerPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(triggerPin, LOW);
  duration = pulseIn(echo, HIGH);
  distance= duration*0.034/2;
  Blynk.virtualWrite(V5, distance);
  if (distance >= 10){
    Blynk.notify("ESP8266 Alert -> distance >= 30");
    Blynk.email("", "", "");
{
  Blynk.run();
  timer.run();
}

  }
  
  
  Serial.print("Distance: ");
  Serial.println(distance);
  
}

Cree una variable llamada mensaje enviado y establézcala en falso.
Solo envíe un mensaje si esa variable es falsa.
Después de enviar un mensaje, cambie la variable a verdadera.

Gracias, pero ¿cómo lo escribo en lenguaje del arduino?

El lenguaje del IDE de Arduino es C ++
El tipo de variable que almacena verdadero y falso es un bool, abreviatura de booleano.
Deberá poner el código de envío del mensaje en una declaración if.
Esas son las piezas que necesitas. Por favor, lea un poco e intente. Luego, si necesita más ayuda, regrese y demuestre lo que ha hecho.

¡Feliz Programación!

muchas gracias!!!

Eres muy bienvenido. Espero ver cómo le va.

Moderador:
Bienvenido al Foro Arduino en Español.
Por favor, lee las Normas del foro y edita tu código en el post#1 usando etiquetas.
Ve a edición, luego selecciona todo el error que has publicado, lo cortas y click en </>


Me acabo de encontrar con este otro hilo tuyo.

Te advierto que lo he cerrado y la próxima vez serás sancionado. Debes leer las normas y justamente no repetir hilos. Por esta vez pasa pero no lo vuelvas a hacer.

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