#define BLYNK_TEMPLATE_ID "TMPL3MZdwa6C8"
#define BLYNK_TEMPLATE_NAME "Water Level control"
#define BLYNK_AUTH_TOKEN "1x4M6ZO74LN9RlqbqY-rVF2_cMxNqIso"

/* Comment this out to disable prints and save space */
#define BLYNK_PRINT Serial
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>

// Set your WiFi credentials
char ssid[] = "Wokwi- Guest";
char pass[] = "";

//Define ultrasonic sensor pins
#define trigPin 4
#define echoPin 2

// Define thresholds for water levels in percentage and corresponding
#define FULL_LEVEL_PERCENTAGE 10
#define EMPTY_LEVEL_PERCENTAGE 80

//#define MOTOR_START_PERCENTAGE 5

#define MAX_DISTANCE 400

//Initialize Blynk
BlynkTimer timer;

void setup()
{
  Serial.begin(115200);
  Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);

  //Timer to check water level periodically
  timer.setInterval(10000L, checkWaterLevel); //Check every 10 seconds
}

void loop()
{
  Blynk.run();
  timer.run();
  }

  void checkWaterLevel()
  {
    long duration, distance;

  

  //Clear the trigger pin
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);

  //Send a 10 microsecond pulse to trigger pin
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);

  //Read the duration of pulse on echo pin
  duration = pulseIn(echoPin, HIGH);

  //Calculate distance in cm
  distance = duration * 0.034/2;

  //Calculate thresholds in cm
  int emptyLevelDistance = MAX_DISTANCE * EMPTY_LEVEL_PERCENTAGE / 100;
  int fullLevelDistance = MAX_DISTANCE * FULL_LEVEL_PERCENTAGE / 100;

  // Check water level and send appropriate message
  if (distance >= emptyLevelDistance)
  {
    Serial.println("Water Level --> Going to Empty");
    Blynk.virtualWrite(V3, "Water Level --> Going to Empty");
    Serial.println("Please --> Turn on the Motor");
    Blynk.virtualWrite(V3, "Please --> Turn on the Motor");
    
  } else if( distance < fullLevelDistance)
  {
    Serial.println("Water Tank Full");
    Blynk.virtualWrite(V3, "Water Tank Full");
  }
  }