Auto/manual motor servo

hello, I have a college assignment to make an automatic floodgate iot project. I want to add a manual system to the servo motor with a blynk slider. after I tried the slider it didn’t work. can anyone to solve my project? thanks. here is my code

#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <SPI.h>

#define BLYNK_PRINT Serial
BlynkTimer timer;

char auth[] = "1N4-RedKSdFvnpGqicl7Fvx0R0zqiiTp";
char ssid[] = "No.71";
char pass[] = "Lawanggintung12";

#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);

#include <Servo.h>
Servo servoMoisture; //servoMoisture
Servo servoUltrasonic; //servoUltrasonic

#define trigPin 12
#define echoPin 13

long duration, distance;

int sensorPin=A0;
int sensorValue=0;
int outputValue=0;

BLYNK_WRITE(V2)
{
  servoMoisture.write(param.asInt());
}

BLYNK_WRITE(V3)
{
  servoUltrasonic.write(param.asInt());
}

void setup() {
  Serial.begin(9600);
  Blynk.begin(auth, ssid, pass, "blynk-cloud.com", 8080);
  lcd.begin();
  lcd.clear();
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  servoMoisture.attach(2);
  servoUltrasonic.attach(15);
  timer.setInterval(1000L, sendUltrasonic);
  timer.setInterval(1000L, sendMoisture);
}

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

void sendMoisture()
{
  sensorValue=analogRead(sensorPin);
  outputValue=map(sensorValue,1023, 165, 0, 100);
  lcd.setCursor(0,1);
  lcd.print("MT =");
  lcd.setCursor(5,1);
  lcd.print(outputValue);
  lcd.setCursor(9,1);
  lcd.print("%");
  Blynk.virtualWrite(V1, outputValue);
  if(outputValue>40)
  {
  servoMoisture.write(0);
  delay(3000);    
  }
  else 
  {
  servoMoisture.write(180);
  delay(3000);
  }
}

void sendUltrasonic() {
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);
  distance = 29-((duration*0.0343) / 2);
  lcd.setCursor(0,0);
  lcd.print("DT = ");
  lcd.setCursor(5,0);
  lcd.print(distance);
  lcd.setCursor(9,0);
  lcd.print("CM");
  Blynk.virtualWrite(V0, distance);
  if (distance <=9  ) { //batas jarak air
  servoUltrasonic.write(0);
  delay(500);
  }

  else if (distance <= 12 ) {
  servoUltrasonic.write(90);
  delay(500);
  }

  else if (distance <=15 ) {
  servoUltrasonic.write(180);
  delay(500);
  }
  else{
  servoUltrasonic.write(180);
  delay(500);
  }
}

Why are these in your void loop, when you’re calling these functions once every second (is that
frequency really needed?) with timers?

What are these delays for?
Blynk doesn’t like blocking delays.

What types of widget are attached to V2 and V3, and what is their function intended to be?

Pete.