I’m using WeMos D1 R2 and latest Blynk library and app. I am also using Arduino IDE 1.6.13. I am trying to read a button from the app, which works fine, but i want to read it continuously. Through the Serial Monitor I can see that the board changes modes as it should. However, even if sensors read values when we get through the first “if” states, the values do not continue to show up in Serial Monitor. I believe that’s happening because it is not working as a loop. Also, the relays are not working(they start as open as they should, but their state never changes), as I believe program freezes at some point.
Here is the code:
//Start of program
#include <dht11.h>
#define BLYNK_PRINT Serial//
#include <ESP8266WiFi.h>
#include <Blynk.h>
#include <BlynkSimpleEsp8266.h>
#include <NewPing.h>
#include <SimpleTimer.h>
#define TRIGGER_PIN2 D4 // Arduino pin tied to trigger pin on the ultrasonic sensor 2.
#define ECHO_PIN2 D5 // Arduino pin tied to echo pin on the ultrasonic sensor 2.
#define MAX_DISTANCE2 23// Height of the Water Tank 2 (in centimeters).
#define DHT11_PIN D6
char auth[] = "****";
char ssid[] = "8888";
char pass[] = "psw";
int Relay1 = D1;
int Relay2 = D2;
int val2 = 0;
int tankwater1 = 0; //water in tank 1 in liters
int tankwater2 = 0; //water in tank 2 in liters
int fieldsize1 = 0; //size of field1 in m^2
int fieldsize2 = 0; //size of field2 in m^2
int sensor_pin = D7;
SimpleTimer timer;
//NewPing sonar1(TRIGGER_PIN1, ECHO_PIN1, MAX_DISTANCE1); // NewPing setup
of pins and maximum distance.
NewPing sonar2(TRIGGER_PIN2, ECHO_PIN2, MAX_DISTANCE2); // NewPing setup of
pins and maximum distance.
void setup()
{
Serial.begin(9600); // opens serial port, sets data rate to 9600 bps
Blynk.begin(auth, ssid, pass);
pinMode(Relay1, OUTPUT); //Setup Relay pin as output pin
pinMode(Relay2, OUTPUT); //Setup Relay pin as output pin
//pinMode(led_pin, OUTPUT);
pinMode(sensor_pin, INPUT);
digitalWrite(Relay1, LOW);
digitalWrite(Relay2, LOW);
}
void loop()
{
Blynk.run();
timer.run();
}
BLYNK_READ(V8)
{
Blynk.virtualWrite(8, 23 - val2); // virtualpin 8 distance
}
BLYNK_WRITE(V1) {
int pinValue = param.asInt();
if (pinValue == 0)
{
val2 = sonar2.convert_cm(sonar2.ping_median());
Serial.println("Irrigation mode is active");
Serial.println("Water level is at:");
Serial.println(23 - val2);
if (digitalRead(sensor_pin) == HIGH)
{
if (val2 <= 15) //Water level reaches the Top of the Tank2
{
digitalWrite(Relay2, HIGH); //Pump2 off
delay(500);
}
else if (val2 > 15) // Water is empty on the Tank2
{
digitalWrite(Relay2, LOW); // Pump2 ON
delay(500);
//delay(86400000); one day delay. not suitable for experiment
}
else if (digitalRead(sensor_pin) == LOW)
{
digitalWrite(Relay1, LOW);
}
}
}
else {
Serial.println("Fertilize mode is active. This does nothing now");
//val3 = sonar2.convert_cm(sonar2.ping_median());
//tankwater2 = (10-val3)*fieldsize2; //calculation of water in tank2
}
}
//End of program