Blynk Solartracker

Hi,
I am Trying to make Solar tracker with LDR and Servo Motor.
My code is working when I exicute it without Blynk. But when I cope those code on Blynk it’s not working.

I try to find reason so I know that LDR reading not coming in Blynk but when I use normaly LDR showing Readings and due to that Servo moving.

Can anyone help me to know what to do and how to use solar tracker with Blynk.

Thank in advance.
Ajinkya

I’m not sure how you expect us to help if you don’t tell is anything about the hardware you are using, the code you are using, or the output you see in your serial monitor.

Pete.

Sorry for incomplete information
I am Using ESP32, Servo motor MG946R - 4 no’s, External power source for Servo motor from Battery Shield 2 cell which gives duel output
3.3 volt = 4 no’s and
5 volt = 4 nos.
Servo connected with 5 volt output.

LDR Reading on Blynk
Battery Shield

Below is My Code

#define BLYNK_TEMPLATE_NAME "Anant Akshay Urja R5"
#define BLYNK_AUTH_TOKEN "hnAnk_AC5D_qzr04NQgqlILmstMGOpDj"
#define BLYNK_PRINT Serial

#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#include <WiFiClientSecure.h>

char ssid[] = "INTEX_CC3CBC";
char pass[] = "12345678";
unsigned long previousMillis = 0;
unsigned long interval = 30000;


#include <ESP32Servo.h>
#include <time.h>

#include "ACS712.h"
#include "DHT.h"
#define DHTTYPE DHT22
#define DHTPIN 4 // Temparture and Humididty Sensor of Boost Converter
DHT dht(DHTPIN, DHTTYPE);
BlynkTimer timer;

void initWiFi() {
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, pass);
  Serial.print("Connecting to WiFi ..");
  while (WiFi.status() != WL_CONNECTED) {
    Serial.print('.');
    delay(1000);
  }
  Serial.println(WiFi.localIP());
}

const char* host = "script.google.com"; // Host & httpsPort
const int httpsPort = 443;
WiFiClientSecure Client;
const char* fingerprint = "0x56, 0xED, 0xC7, 0xDA, 0xBF, 0x51, 0x12, 0xC2, 0x79, 0x43, 0xC6, 0x01, 0xAB, 0xF7, 0x88, 0x98, 0x0F, 0x97, 0xB2, 0xB8";
String GAS_ID = "AKfycbwNJIa6FVXV8NMqXKrZXTl7PvKtHVjVH9X2LqqiG53MLeS6RerjVrLQNhFQnWiFi4L4"; //--> spreadsheet script ID

int solarvoltage = 34; // Solar Voltage Sensor
int batteryvoltage = 39; // Battery Voltage Sensor
float correctionfactor = 1.1;
float vout = 0.0;
float vin = 0.0;

float R1 = 30000 + 150000;
float R2 = 7500;
int value = 0.0;

int solarcurrent = 35; // Solar Current Sensor
int batterycurrent = 36; // Battery Current Sensor
ACS712  ACS(35, 5.0, 4095, 66);
double voltage = 0.0;
double current = 0.0;

// LDR pin connections
//name = analogpin;
int ldrlt =25; //LDR top left - BOTTOM LEFT <--- BDG
int ldrrt =26; //LDR top rigt - BOTTOM RIGHT
int ldrld =27; //LDR down left - TOP LEFT
int ldrrd =14; //ldr down rigt - TOP RIGHT

Servo horizontal; // horizontal servo
int servoh = 90; 
int servohLimitHigh = 180;
int servohLimitLow = 1;
// 65 degrees MAX

Servo vertical; // vertical servo
int servov = 90; 
int servovLimitHigh = 180;
int servovLimitLow = 1;


BLYNK_WRITE(V0)
{
  int value = param.asInt();
  Serial.println(value);
  if(value == 0)
  {
    digitalWrite(23, LOW); // Solar Power On Off
    Serial.println("solar Off");
  }
  if(value == 1)
  {
     digitalWrite(23, HIGH);
     Serial.println("Solar On");
  }
}

BLYNK_WRITE(V1)
{
  int value = param.asInt();
  Serial.println(value);
  if(value == 0)
  {
    digitalWrite(22, LOW); // Battery Charging Power On Off
    Serial.println("Battery Off");
  }
  if(value == 1)
  {
     digitalWrite(22, HIGH);
     Serial.println("Battery On");
  }
}

BLYNK_WRITE(V2)
{
  int value = param.asInt();
  Serial.println(value);
  if(value == 0)
  {
    digitalWrite(21, LOW); // Cooling Fan for Boost Converter Power On Off
    Serial.println("Fan Off");
  }
  if(value == 1)
  {
     digitalWrite(21, HIGH);
     Serial.println("Fan On");
  }
}

BLYNK_WRITE(V3)
{
    
  int value = param.asInt();
  Serial.println(value);
  if(value == 0)
  { 
  digitalWrite(25, LOW); // LDR Top Left Solar Tracker Power On off
  digitalWrite(26, LOW); // LDR Top Right Solar Tracker Power On off
  digitalWrite(27, LOW); // LDR Bottom Left Solar Tracker Power On off
  digitalWrite(14, LOW); // LDR Bottom Right Solar Tracker Power On off
  Serial.println("Solar Tracker Off");

  }
  if(value == 1)
  {
  digitalWrite(25, HIGH); // LDR Top Left Solar Tracker Power On off
  digitalWrite(26, HIGH); // LDR Top Right Solar Tracker Power On off
  digitalWrite(27, HIGH); // LDR Bottom Left Solar Tracker Power On off
  digitalWrite(14, HIGH); // LDR Bottom Right Solar Tracker Power On off
  Serial.println("Solar Tracker On");
 }

}
void Sensorvalue1()
{
  int sdata = 0.0;
  value = analogRead(solarvoltage);
  vout = (value * 5.0) / 4096.0; 
  vin = vout / (R2/(R1+R2));
  vin = vin - correctionfactor;
if (vin < 0.01) {
  vin = 0.0;
}

  Serial.print("Solar Voltage= ");
  Serial.println(vin, 2);
  delay(100);
  sdata = vin;
  Blynk.virtualWrite(V4, sdata);

}
void Sensorvalue2()
{
  int sdata = 0.0;
  value = analogRead(batteryvoltage);
  vout = (value * 3.3) / 4096.0; 
  vin = vout / (R2/(R1+R2));
  vin = vin - correctionfactor;
if (vin < 0.01) {
  vin = 0.0;
}
  Serial.print("Battery Voltage= ");
  Serial.println(vin, 2);
  delay(100);
  sdata = vin;
  Blynk.virtualWrite(V5, sdata);
}


void Sensorvalue3(){
  for(int i = 0.0; i < 1000; i++);
  { 
      voltage = (voltage + (0.0264 * analogRead(35)));
  delay (100);
      }
  voltage = voltage / 1000;
current = (voltage - 2.5) / 66;
  
  if (current < 0.01) {
  current = 0.0;
  }
  Serial.print("Solar Current= ");
  Serial.println(current, 2);
  delay(100);
  Blynk.virtualWrite(V6, current);
}
void Sensorvalue4(){
  for(int i = 0.0; i < 1000; i++);
    { 
      voltage = (voltage + (0.0264 * analogRead(36)));
  delay (100);
      }
  voltage = voltage / 1000;
current = (voltage - 2.5) / 66;
  
  if (current < 0.01) {
  current = 0.0; 
} 
  Serial.print("Battery Current= ");
  Serial.println(current, 2);
  delay(100);
  Blynk.virtualWrite(V7, current);
  }
  
void Sensorvalue5()
{
  float t = dht.readTemperature(); 
  float h = dht.readHumidity();

  if (isnan(h) || isnan(t)) {
  Serial.println("Failed to read from DHT sensor!");
  return;
  }

    Blynk.virtualWrite(V8, t);
    Blynk.virtualWrite(V9, h);
    Serial.print("Temperature : ");
    Serial.println(t, 2);
    Serial.print("Humidity : ");
    Serial.println(h, 2);
    delay(100);
}



void Sensorvalue7()
{

int lt = analogRead(ldrlt); // top left
int rt = analogRead(ldrrt); // top right
int ld = analogRead(ldrld); // down left
int rd = analogRead(ldrrd); // down right


int dtime = 10; // dtime=diffirence time, 
int tol = 10; // tol=toleransi

int avt = (lt + rt) / 2; // average value top
int avd = (ld + rd) / 2; // average value down
int avl = (lt + ld) / 2; // average value left
int avr = (rt + rd) / 2; // average value right
int dvert = avt - avd; // check the diffirence of up and down
int dhoriz = avl - avr;// check the diffirence og left and rigt

servoh = horizontal.read();
servov = vertical.read();
//delay(500);


  if (-1*tol > dvert || dvert > tol) 
 {
 if (avt > avd)
 { 
   servov = ++servov;
 if (servov > servovLimitHigh)
 {servov = servovLimitHigh;}
 }
 else if (avt < avd)
 {servov= --servov;
 if (servov < servovLimitLow)
 { servov = servovLimitLow;}
 }
 vertical.write(servov);
 }
if (-1*tol > dhoriz || dhoriz > tol) // check if the diffirence is in the tolerance else change horizontal angle
 {
 if (avl > avr)
 {
 servoh = --servoh;
 if (servoh < servohLimitLow)
 {
 servoh = servohLimitLow;
 }
 }
 else if (avl < avr)
 {
 servoh = ++servoh;
 if (servoh > servohLimitHigh)
 {
 servoh = servohLimitHigh;
 }
 }
 else if (avl = avr)
 {
 //delay(1000);
 }
 horizontal.write(servoh);
 }
    
Serial.print("Average Value Top : ");
Serial.println(avt);

Serial.print("Average Value Down : ");
Serial.println(avd);

Serial.print("Average Value Left : ");
Serial.println(avl);

Serial.print("Average Value Right : ");
Serial.println(avr);

Serial.print(" ");
Serial.println(dtime);

Serial.print(" ");
Serial.println(tol);
delay(dtime);
}      

void setup()
{
Serial.begin(9600);
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
WiFi.begin(ssid, pass);
unsigned long currentMillis = millis();
  //if WiFi is down, try reconnecting every CHECK_WIFI_TIME seconds
  if ((WiFi.status() != WL_CONNECTED) && (currentMillis - previousMillis >=interval)) {
    Serial.print(millis());
   Serial.println("Reconnecting to WiFi...");
   WiFi.disconnect();
   WiFi.reconnect();
   previousMillis = currentMillis;
dht.begin(); // Initialize the DHT sensor

horizontal.attach(18);
horizontal.attach(16);

vertical.attach(17);
vertical.attach(5);

horizontal.write(90);
vertical.write(90);

pinMode(23,OUTPUT); // Solar Power On Off
pinMode(22,OUTPUT); // Battery Charging Power On Off
pinMode(21,OUTPUT); // Cooling Fan for Boost Converter Power On Off
pinMode(35,INPUT); // Solar Current Sensor
pinMode(36,INPUT); // Battery Current Sensor
pinMode(34,INPUT); // Solar Voltage Sensor
pinMode(39,INPUT); // Battery Voltage Sensor
pinMode(4,INPUT); // Temparture and Humididty Sensor of Boost Converter

}
void loop()
 {
  Blynk.run(); 
  Sensorvalue1();
  Sensorvalue2();
  Sensorvalue3();
  Sensorvalue4();
  Sensorvalue5();
  Sensorvalue7();
  delay(1000);
}```

@Ajinkya Please edit your post, using the pencil icon at the bottom, and add triple backticks at the beginning and end of your code so that it displays correctly.
Triple backticks look like this:
```

Copy and paste these if you can’t find the correct symbol on your keyboard.

Pete.

thanks

These are all ADC2 pins, which can’t be used at the same time as WiFi…

Pete.

Thanks Man,
Your advice is always works
LDR start showing readings.and Servo start moving. Not like expected , but atleast start moving. I will check what is the issue in Servo movment.

But I am trying to on and off LDR reading, so when I want I will on Solar tracker and when I don’t want I will off the reading of LDR so Servo will come to thire original position.
I am using BLYNK_WRITE (V3) for on and off LDR reading.
But it’s showing error.
Image attached for more information.

Did I doing anything wrong again

Thanks

When you post serial output you need to copy the text from your serial monitor and paste it with triple backticks at the beginning and end - the same as when you post code.
Don’t post screenshots of your serial output.

I can’t tell which lines of code are producing the “10”, “10”, “1” and the subsequent error lines. Do you know where these are coming from?

Also, you shouldn’t be using delays in your code, you should be using BlynkTimer instead.

Pete.


19:30:30.935 -> Battery Current= 0.00

19:30:31.107 -> Temperature : 27.20

19:30:31.138 -> Humidity : 96.90

19:30:31.171 -> Average Value Top : 920

19:30:31.171 -> Average Value Down : 1124

19:30:31.203 -> Average Value Left : 1418

19:30:31.235 -> Average Value Right : 627

19:30:31.266 -> time diffirence 10

19:30:31.298 -> Vertical Servo Position : 1

19:30:31.331 -> Horizontal Servo Position : 1

19:30:31.366 -> tolerans 10

19:30:31.767 -> Solar Voltage= 43.79

19:30:31.811 -> Battery Voltage= 8.55

19:30:31.845 -> Solar Current= 0.00

19:30:31.875 ->Solar Tracker off =  0

19:30:31.875 -> E (75488) gpio: gpio_set_level(226): GPIO output gpio_num error

19:30:31.939 -> E (75488) gpio: gpio_set_level(226): GPIO output gpio_num error

19:30:32.002 -> E (75492) gpio: gpio_set_level(226): GPIO output gpio_num error

19:30:32.066 -> E (75560) gpio: gpio_set_level(226): GPIO output gpio_num error```

I Read Your FAQ on BlynkTimer and made some changes in code,
i don’t know its right or not but Everything working fine, except LDR on and Off.

below is my revised code

#define BLYNK_TEMPLATE_NAME "Anant Akshay Urja R5"
#define BLYNK_AUTH_TOKEN "hnAnk_AC5D_qzr04NQgqlILmstMGOpDj"
#define BLYNK_PRINT Serial

#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#include <WiFiClientSecure.h>

char ssid[] = "INTEX_CC3CBC"; // Honor 7X_1A08
char pass[] = "12345678"; //b42d9675

#include <ESP32Servo.h>
#include <time.h>

#include "ACS712.h"
#include "DHT.h"
#define DHTTYPE DHT22
#define DHTPIN 4 // Temparture and Humididty Sensor of Boost Converter
DHT dht(DHTPIN, DHTTYPE);
BlynkTimer timer;
unsigned long previousMillis = 0;
unsigned long interval = 30000;


const char* host = "script.google.com"; // Host & httpsPort
const int httpsPort = 443;
WiFiClientSecure Client;
const char* fingerprint = "0x56, 0xED, 0xC7, 0xDA, 0xBF, 0x51, 0x12, 0xC2, 0x79, 0x43, 0xC6, 0x01, 0xAB, 0xF7, 0x88, 0x98, 0x0F, 0x97, 0xB2, 0xB8";
String GAS_ID = "AKfycbwNJIa6FVXV8NMqXKrZXTl7PvKtHVjVH9X2LqqiG53MLeS6RerjVrLQNhFQnWiFi4L4"; //--> spreadsheet script ID

int solarvoltage = 34; // Solar Voltage Sensor
int batteryvoltage = 39; // Battery Voltage Sensor
float correctionfactor = 1.1;
float vout = 0.0;
float vin = 0.0;

float R1 = 30000 + 150000;
float R2 = 7500;
int value = 0.0;

int solarcurrent = 35; // Solar Current Sensor
int batterycurrent = 36; // Battery Current Sensor
ACS712  ACS(35, 5.0, 4095, 66);
double voltage = 0.0;
double current = 0.0;

// LDR pin connections
//name = analogpin;
int ldrlt =36; //LDR top left - BOTTOM LEFT <--- BDG
int ldrrt =39; //LDR top rigt - BOTTOM RIGHT
int ldrld =34; //LDR down left - TOP LEFT
int ldrrd =35; //ldr down rigt - TOP RIGHT


Servo horizontal; // horizontal servo
int servoh = 90;  // start at degree    
int servohLimitHigh = 180;
int servohLimitLow = 1;
// 65 degrees MAX

Servo vertical; // vertical servo
int servov = 90;  // start at degree    
int servovLimitHigh = 180;
int servovLimitLow = 1;

void initWiFi() {
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, pass);
  Serial.print("Connecting to WiFi ..");
  while (WiFi.status() != WL_CONNECTED) {
    Serial.print('.');
    //delay(1000);
  }
  unsigned long currentMillis = millis();
  //if WiFi is down, try reconnecting every CHECK_WIFI_TIME seconds
  if ((WiFi.status() != WL_CONNECTED) && (currentMillis - previousMillis >=interval)) {
    Serial.print(millis());
   Serial.println("Reconnecting to WiFi...");
   WiFi.disconnect();
   WiFi.reconnect();
   previousMillis = currentMillis;
  }
  Serial.println(WiFi.localIP());
}


BLYNK_WRITE(V0)
{
  int value = param.asInt();
  Serial.println(value);
  if(value == 0)
  {
    digitalWrite(23, LOW); // Solar Power On Off
    Serial.println("solar Off");
  }
  if(value == 1)
  {
     digitalWrite(23, HIGH);
     Serial.println("Solar On");
  }
}

BLYNK_WRITE(V1)
{
  int value = param.asInt();
  Serial.println(value);
  if(value == 0)
  {
    digitalWrite(22, LOW); // Battery Charging Power On Off
    Serial.println("Battery Off");
  }
  if(value == 1)
  {
     digitalWrite(22, HIGH);
     Serial.println("Battery On");
  }
}

BLYNK_WRITE(V2)
{
  int value = param.asInt();
  Serial.println(value);
  if(value == 0)
  {
    digitalWrite(21, LOW); // Cooling Fan for Boost Converter Power On Off
    Serial.println("Fan Off");
  }
  if(value == 1)
  {
     digitalWrite(21, HIGH);
     Serial.println("Fan On");
  }
}

BLYNK_WRITE(V3)
{
  int value = param.asInt();
  Serial.println(value);
  if(value == 0)
  {   
  digitalWrite(36, LOW); // LDR Top Left Solar Tracker Power On off
  digitalWrite(39, LOW); // LDR Top Right Solar Tracker Power On off
  digitalWrite(34, LOW); // LDR Bottom Left Solar Tracker Power On off
  digitalWrite(35, LOW); // LDR Bottom Right Solar Tracker Power On off
  Serial.println("Solar Tracker Off");
  }
  if(value == 1)
  {
  digitalWrite(36, HIGH); // LDR Top Left Solar Tracker Power On off
  digitalWrite(39, HIGH); // LDR Top Right Solar Tracker Power On off
  digitalWrite(34, HIGH); // LDR Bottom Left Solar Tracker Power On off
  digitalWrite(35, HIGH); // LDR Bottom Right Solar Tracker Power On off
  Serial.println("Solar Tracker On");
 }
   //delay(100);

}



void Sensorvalue1()
{
  int sdata = 0.0;
  value = analogRead(solarvoltage);
  vout = (value * 5.0) / 4096.0; 
  vin = vout / (R2/(R1+R2));
  vin = vin - correctionfactor;
if (vin < 0.01) {
  vin = 0.0;
}

  Serial.print("Solar Voltage= ");
  Serial.println(vin, 2);
  sdata = vin;
  Blynk.virtualWrite(V4, sdata);
  //delay(100);

}
void Sensorvalue2()
{
  int sdata = 0.0;
  value = analogRead(batteryvoltage);
  vout = (value * 3.3) / 4096.0; 
  vin = vout / (R2/(R1+R2));
  vin = vin - correctionfactor;
if (vin < 0.01) {
  vin = 0.0;
}
  Serial.print("Battery Voltage= ");
  Serial.println(vin, 2);
  sdata = vin;
  Blynk.virtualWrite(V5, sdata);
  //delay(100);
}


void Sensorvalue3(){
  for(int i = 0.0; i < 1000; i++);
  { 
      voltage = (voltage + (0.0264 * analogRead(35)));
  //delay (100);
      }
  voltage = voltage / 1000;
current = (voltage - 2.5) / 66;
  
  if (current < 0.01) {
  current = 0.0;
  }
  Serial.print("Solar Current= ");
  Serial.println(current, 2);
  Blynk.virtualWrite(V6, current);
  //delay(100);
}
void Sensorvalue4(){
  for(int i = 0.0; i < 1000; i++);
    { 
      voltage = (voltage + (0.0264 * analogRead(36)));
  //delay (100);
      }
  voltage = voltage / 1000;
current = (voltage - 2.5) / 66;
  
  if (current < 0.01) {
  current = 0.0; 
} 
  Serial.print("Battery Current= ");
  Serial.println(current, 2);
  Blynk.virtualWrite(V7, current);
  //delay(100);
  }
  
void Sensorvalue5()
{
  float t = dht.readTemperature(); 
  float h = dht.readHumidity();

  if (isnan(h) || isnan(t)) {
  Serial.println("Failed to read from DHT sensor!");
  return;
  }

    Blynk.virtualWrite(V8, t);
    Blynk.virtualWrite(V9, h);
    Serial.print("Temperature : ");
    Serial.println(t, 2);
    Serial.print("Humidity : ");
    Serial.println(h, 2);
    //delay(100);
}

void Sensorvalue7()
{

int lt = analogRead(ldrlt); // top left
int rt = analogRead(ldrrt); // top right
int ld = analogRead(ldrld); // down left
int rd = analogRead(ldrrd); // down right


int dtime = 10; // dtime=diffirence time, 
int tol = 10; // tol=toleransi

int avt = (lt + rt) / 2; // average value top
int avd = (ld + rd) / 2; // average value down
int avl = (lt + ld) / 2; // average value left
int avr = (rt + rd) / 2; // average value right
int dvert = avt - avd; // check the diffirence of up and down
int dhoriz = avl - avr;// check the diffirence og left and rigt



  if (-1*tol > dvert || dvert > tol) 
 {
 if (avt > avd)
 { 
   servov = ++servov;
 if (servov > servovLimitHigh)
 {servov = servovLimitHigh;}
 }
 else if (avt < avd)
 {servov= --servov;
 if (servov < servovLimitLow)
 { servov = servovLimitLow;}
 }
 vertical.write(servov);
 }
if (-1*tol > dhoriz || dhoriz > tol) // check if the diffirence is in the tolerance else change horizontal angle
 {
 if (avl > avr)
 {
 servoh = --servoh;
 if (servoh < servohLimitLow)
 {
 servoh = servohLimitLow;
 }
 }
 else if (avl < avr)
 {
 servoh = ++servoh;
 if (servoh > servohLimitHigh)
 {
 servoh = servohLimitHigh;
 }
 }
 else if (avl = avr)
 {
 //delay(1000);
 }
 horizontal.write(servoh);
 }
Serial.print("Average Value Top : ");
Serial.println(avt);

Serial.print("Average Value Down : ");
Serial.println(avd);

Serial.print("Average Value Left : ");
Serial.println(avl);

Serial.print("Average Value Right : ");
Serial.println(avr);

Serial.print("time diffirence ");
Serial.println(dtime);

Serial.print("Vertical Servo Position : ");
Serial.println(servov);

Serial.print("Horizontal Servo Position : ");
Serial.println(servoh);

Serial.print("tolerans ");
Serial.println(tol);
//delay(dtime);
}      

void setup()
{
Serial.begin(9600);
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
WiFi.begin(ssid, pass);

initWiFi();

dht.begin(); // Initialize the DHT sensor

servoh = horizontal.read();
servov = vertical.read();

horizontal.attach(18);
horizontal.attach(16);

vertical.attach(17);
vertical.attach(5);

horizontal.write(90);
vertical.write(90);

pinMode(23,OUTPUT); // Solar Power On Off
pinMode(22,OUTPUT); // Battery Charging Power On Off
pinMode(21,OUTPUT); // Cooling Fan for Boost Converter Power On Off
pinMode(36,INPUT); // LDR Top Left Solar Tracker Power On off
pinMode(39,INPUT); // LDR Top Right Solar Tracker Power On off
pinMode(34,INPUT); // LDR Bottom Left Solar Tracker Power On off
pinMode(35,INPUT); // LDR Bottom Right Solar Tracker Power On off
pinMode(35,INPUT); // Solar Current Sensor
pinMode(36,INPUT); // Battery Current Sensor
pinMode(34,INPUT); // Solar Voltage Sensor
pinMode(39,INPUT); // Battery Voltage Sensor
pinMode(4,INPUT); // Temparture and Humididty Sensor of Boost Converter

  timer.setInterval(1000L,  Sensorvalue1);
  timer.setInterval(1000L,  Sensorvalue2);
  timer.setInterval(1000L,  Sensorvalue3);
  timer.setInterval(1000L,  Sensorvalue4);
  timer.setInterval(1000L,  Sensorvalue5);
  timer.setInterval(1000L,  Sensorvalue7);

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

Maybe you should go back and re-read it!

TBH, you only need one function to sequentially call these SensorValue functions, so you really only need one timer.

I’m guessing that your latest serial output wasn’t generated by your revised code, because I don’t see a line of code that would generate this output…

Pete.

Ok pete,
I definitely read that FAQ again.

I mention "Solar Tracker Off = " in this, in front of “0” to show where from that “0” value come, code detail is as per below but its not come to serial monitor

BLYNK_WRITE(V3)

  int value = param.asInt();
  Serial.println(value);
  if(value == 0)
  {    
  digitalWrite(36, LOW); // LDR Top Left Solar Tracker Power On off
  digitalWrite(39, LOW); // LDR Top Right Solar Tracker Power On off
  digitalWrite(34, LOW); // LDR Bottom Left Solar Tracker Power On off
  digitalWrite(35, LOW); // LDR Bottom Right Solar Tracker Power On off
  Serial.println("Solar Tracker Off");

  }
  if(value == 1)
  {
  digitalWrite(36, HIGH); // LDR Top Left Solar Tracker Power On off
  digitalWrite(39, HIGH); // LDR Top Right Solar Tracker Power On off
  digitalWrite(34, HIGH); // LDR Bottom Left Solar Tracker Power On off
  digitalWrite(35, HIGH); // LDR Bottom Right Solar Tracker Power On off
  Serial.println("Solar Tracker On");
 }
   //delay(100);
}```

does BlynkTimer Control to on and Off LDR value and reposition Servo at their start Position ??
Which is as per below

int servoh = 90;  // start at degree

Servo vertical; // vertical servo
int servov = 90;  // start at degree ```

This code…

did not produce this output…

I’m not going to spend time trying to work-out the cause of the serial monitor error output if the output you’ve posted didn’t come from the code you’ve posted.

Post the latest code, and the serial output it produces if you want me to look at it.

I don’t understand the question.

Pete.

below Is my latest code,


#define BLYNK_TEMPLATE_NAME "Anant Akshay Urja R5"

#define BLYNK_AUTH_TOKEN "hnAnk_AC5D_qzr04NQgqlILmstMGOpDj"

#define BLYNK_PRINT Serial

#include <WiFi.h>

#include <WiFiClient.h>

#include <BlynkSimpleEsp32.h>

#include <WiFiClientSecure.h>

char ssid[] = "INTEX_CC3CBC"; // Honor 7X_1A08

char pass[] = "12345678"; //b42d9675

#include <ESP32Servo.h>

#include <time.h>

#include "ACS712.h"

#include "DHT.h"

#define DHTTYPE DHT22

#define DHTPIN 4 // Temparture and Humididty Sensor of Boost Converter

DHT dht(DHTPIN, DHTTYPE);

BlynkTimer timer;

unsigned long previousMillis = 0;

unsigned long interval = 30000;

const char* host = "script.google.com"; // Host & httpsPort

const int httpsPort = 443;

WiFiClientSecure Client;

const char* fingerprint = "0x56, 0xED, 0xC7, 0xDA, 0xBF, 0x51, 0x12, 0xC2, 0x79, 0x43, 0xC6, 0x01, 0xAB, 0xF7, 0x88, 0x98, 0x0F, 0x97, 0xB2, 0xB8";

String GAS_ID = "AKfycbwNJIa6FVXV8NMqXKrZXTl7PvKtHVjVH9X2LqqiG53MLeS6RerjVrLQNhFQnWiFi4L4"; //--> spreadsheet script ID

int solarvoltage = 34; // Solar Voltage Sensor

int batteryvoltage = 39; // Battery Voltage Sensor

float correctionfactor = 1.1;

float vout = 0.0;

float vin = 0.0;

float R1 = 30000 + 150000;

float R2 = 7500;

int value = 0.0;

int solarcurrent = 35; // Solar Current Sensor

int batterycurrent = 36; // Battery Current Sensor

ACS712  ACS(35, 5.0, 4095, 66);

double voltage = 0.0;

double current = 0.0;


int ldrlt =36; //LDR top left - BOTTOM LEFT <--- BDG

int ldrrt =39; //LDR top rigt - BOTTOM RIGHT

int ldrld =34; //LDR down left - TOP LEFT

int ldrrd =35; //ldr down rigt - TOP RIGHT

Servo horizontal; // horizontal servo

int servoh = 90;  // start at degree    

int servohLimitHigh = 180;

int servohLimitLow = 0;

// 65 degrees MAX

Servo vertical; // vertical servo

int servov = 90;  // start at degree    

int servovLimitHigh = 180;

int servovLimitLow = 0;

void initWiFi() {

  WiFi.mode(WIFI_STA);

  WiFi.begin(ssid, pass);

  Serial.print("Connecting to WiFi ..");

  while (WiFi.status() != WL_CONNECTED) {

    Serial.print('.');

    //delay(1000);

  }

  unsigned long currentMillis = millis();

  //if WiFi is down, try reconnecting every CHECK_WIFI_TIME seconds

  if ((WiFi.status() != WL_CONNECTED) && (currentMillis - previousMillis >=interval)) {

    Serial.print(millis());

   Serial.println("Reconnecting to WiFi...");

   WiFi.disconnect();

   WiFi.reconnect();

   previousMillis = currentMillis;

  }

  Serial.println(WiFi.localIP());

}

BLYNK_WRITE(V0)

{

  int value = param.asInt();

  Serial.print(value);

  if(value == 0)

  {

    digitalWrite(23, LOW); // Solar Power On Off

    Serial.println(" : Solar Off : ");

  }

  if(value == 1)

  {

     digitalWrite(23, HIGH);

     Serial.println(" : Solar On : ");

  }

}

BLYNK_WRITE(V1)

{

  int value = param.asInt();

  Serial.print(value);

  if(value == 0)

  {

    digitalWrite(22, LOW); // Battery Charging Power On Off

    Serial.println(" : Battery Off");

  }

  if(value == 1)

  {

     digitalWrite(22, HIGH);

     Serial.println(" : Battery On");

  }

}

BLYNK_WRITE(V2)

{

  int value = param.asInt();

  Serial.print(value);

  if(value == 0)

  {

    digitalWrite(21, LOW); // Cooling Fan for Boost Converter Power On Off

    Serial.println(" : Fan Off");

  }

  if(value == 1)

  {

     digitalWrite(21, HIGH);

     Serial.println(" : Fan On");

  }

}

BLYNK_WRITE(V3)

{

  int value = param.asInt();

  Serial.print(value);

  if(value == 0)

  {

  digitalWrite(36, LOW); // LDR Top Left Solar Tracker Power On off

  digitalWrite(39, LOW); // LDR Top Right Solar Tracker Power On off

  digitalWrite(34, LOW); // LDR Bottom Left Solar Tracker Power On off

  digitalWrite(35, LOW); // LDR Bottom Right Solar Tracker Power On off

  Serial.println(" : Solar Tracker Off");

  }

  if(value == 1)

  {

  digitalWrite(36, HIGH); // LDR Top Left Solar Tracker Power On off

  digitalWrite(39, HIGH); // LDR Top Right Solar Tracker Power On off

  digitalWrite(34, HIGH); // LDR Bottom Left Solar Tracker Power On off

  digitalWrite(35, HIGH); // LDR Bottom Right Solar Tracker Power On off

  Serial.print(" : Solar Tracker On");

 }

   //delay(100);

}

void Sensorvalue1()

{

  int sdata = 0.0;

  value = analogRead(solarvoltage);

  vout = (value * 5.0) / 4096.0;

  vin = vout / (R2/(R1+R2));

  vin = vin - correctionfactor;

if (vin < 0.01) {

  vin = 0.0;

}

  Serial.print("Solar Voltage= ");

  Serial.println(vin, 2);

  sdata = vin;

  Blynk.virtualWrite(V4, sdata);

  //delay(100);

}

void Sensorvalue2()

{

  int sdata = 0.0;

  value = analogRead(batteryvoltage);

  vout = (value * 3.3) / 4096.0;

  vin = vout / (R2/(R1+R2));

  vin = vin - correctionfactor;

if (vin < 0.01) {

  vin = 0.0;

}

  Serial.print("Battery Voltage= ");

  Serial.println(vin, 2);

  sdata = vin;

  Blynk.virtualWrite(V5, sdata);

  //delay(100);

}

void Sensorvalue3(){

  for(int i = 0.0; i < 1000; i++);

  {

      voltage = (voltage + (0.0264 * analogRead(35)));

  //delay (100);

      }

  voltage = voltage / 1000;

current = (voltage - 2.5) / 66;

 

  if (current < 0.01) {

  current = 0.0;

  }

  Serial.print("Solar Current= ");

  Serial.println(current, 2);

  Blynk.virtualWrite(V6, current);

  //delay(100);

}

void Sensorvalue4(){

  for(int i = 0.0; i < 1000; i++);

    {

      voltage = (voltage + (0.0264 * analogRead(36)));

  //delay (100);

      }

  voltage = voltage / 1000;

current = (voltage - 2.5) / 66;

 

  if (current < 0.01) {

  current = 0.0;

}

  Serial.print("Battery Current= ");

  Serial.println(current, 2);

  Blynk.virtualWrite(V7, current);

  //delay(100);

  }

 

void Sensorvalue5()

{

  float t = dht.readTemperature();

  float h = dht.readHumidity();

  if (isnan(h) || isnan(t)) {

  Serial.println("Failed to read from DHT sensor!");

  return;

  }

    Blynk.virtualWrite(V8, t);

    Blynk.virtualWrite(V9, h);

    Serial.print("Temperature : ");

    Serial.println(t, 2);

    Serial.print("Humidity : ");

    Serial.println(h, 2);

    //delay(100);

}

void Sensorvalue7()

{

int lt = analogRead(ldrlt); // top left

int rt = analogRead(ldrrt); // top right

int ld = analogRead(ldrld); // down left

int rd = analogRead(ldrrd); // down right

int dtime = 10; // dtime=diffirence time,

int tol = 100; // LDR Value tol=toleransi

int avt = (lt + rt) / 2; // average value top

int avd = (ld + rd) / 2; // average value down

int avl = (lt + ld) / 2; // average value left

int avr = (rt + rd) / 2; // average value right

int dvert = avt - avd; // check the diffirence of up and down

int dhoriz = avl - avr;// check the diffirence og left and rigt

  if (-1*tol > dvert || dvert > tol)

 {

 if (avt > avd)

 {

   servov = ++servov;

 if (servov > servovLimitHigh)

 {servov = servovLimitHigh;}

 }

 else if (avt < avd)

 {servov= --servov;

 if (servov < servovLimitLow)

 { servov = servovLimitLow;}

 }

 vertical.write(servov);

 }

if (-1*tol > dhoriz || dhoriz > tol) // check if the diffirence is in the tolerance else change horizontal angle

 {

 if (avl > avr)

 {

 servoh = --servoh;

 if (servoh < servohLimitLow)

 {

 servoh = servohLimitLow;

 }

 }

 else if (avl < avr)

 {

 servoh = ++servoh;

 if (servoh > servohLimitHigh)

 {

 servoh = servohLimitHigh;

 }

 }

 else if (avl = avr)

 {

 //delay(1000);

 }

 horizontal.write(servoh);

 }

   

Serial.print("Average Value Top : ");

Serial.println(avt);

Serial.print("Average Value Down : ");

Serial.println(avd);

Serial.print("Average Value Left : ");

Serial.println(avl);

Serial.print("Average Value Right : ");

Serial.println(avr);

//Serial.print("time diffirence ");

//Serial.println(dtime);

Serial.print("Vertical Servo Position : ");

Serial.println(servov);

Serial.print("Horizontal Servo Position : ");

Serial.println(servoh);

//Serial.print("LDR Value tolerans ");

//Serial.println(tol);

//delay(dtime);

}      

void setup()

{

Serial.begin(9600);

Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);

WiFi.begin(ssid, pass);

initWiFi();

dht.begin(); // Initialize the DHT sensor

horizontal.attach(18);

horizontal.attach(16);

horizontal.write(90);

vertical.attach(17);

vertical.attach(5);

vertical.write(90);

pinMode(23,OUTPUT); // Solar Power On Off

pinMode(22,OUTPUT); // Battery Charging Power On Off

pinMode(21,OUTPUT); // Cooling Fan for Boost Converter Power On Off

pinMode(36,INPUT); // LDR Top Left Solar Tracker Power On off

pinMode(39,INPUT); // LDR Top Right Solar Tracker Power On off

pinMode(34,INPUT); // LDR Bottom Left Solar Tracker Power On off

pinMode(35,INPUT); // LDR Bottom Right Solar Tracker Power On off


pinMode(35,INPUT); // Solar Current Sensor

pinMode(36,INPUT); // Battery Current Sensor

pinMode(34,INPUT); // Solar Voltage Sensor

pinMode(39,INPUT); // Battery Voltage Sensor

pinMode(4,INPUT); // Temparture and Humididty Sensor of Boost Converter



  timer.setInterval(50L,  Sensorvalue7); // Solar Tracker LDR and Servo
  timer.setInterval(123L,  Sensorvalue1); // Solar VOltage Sensor
  timer.setInterval(143L,  Sensorvalue2); // battery Voltage Sensor
  timer.setInterval(163L,  Sensorvalue3); // Solar Current Sensor
  timer.setInterval(183L,  Sensorvalue4); // Battery Current Sensor
  timer.setInterval(5000L,  Sensorvalue5); // Temprature and Humidity Sensor
}

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


And below is my Serial Monitor Output

01:52:25.920 -> Vertical Servo Position : 90
01:52:25.952 -> Horizontal Servo Position : 90
01:52:25.984 -> Solar Voltage= 0.00
01:52:25.984 -> Battery Voltage= 0.00
01:52:26.017 -> Solar Current= 0.00
01:52:26.098 -> Battery Current= 0.00
01:52:26.270 -> Temperature : 26.80
01:52:26.301 -> Humidity : 98.10
01:52:26.301 -> Average Value Top : 0
01:52:26.334 -> Average Value Down : 5
01:52:26.365 -> Average Value Left : 5
01:52:26.397 -> Average Value Right : 0

i mean to say, how can i on solar tracker and then it will start tracking solar and when i off solar tracker it will stop tracking solar and servo motor will come to their original position.

Why is your code double spaced? It’s so much harder to read that way.

When you use triple backticks they need to be on a line of their own.
When you post serial output it needs to have triple backticks too.

It appear that you’re no longer getting the error message, is that issue solved now?

Pete.

sorry for inconvenience, i am new in this forum and don’t know how to post code, but i will check and improve it soon.

now reading LDR value are not showing any issues, but still i can not able to start and stop Solar Tracker.

that Error come when i use Solar tracker On and off Switch on Blynk app.

below are the Serial Monitor Details

02:14:43.959 -> 0E (1935271) gpio: gpio_set_level(226): GPIO output gpio_num error
02:14:44.023 -> E (1935271) gpio: gpio_set_level(226): GPIO output gpio_num error
02:14:44.087 -> E (1935340) gpio: gpio_set_level(226): GPIO output gpio_num error
02:14:44.182 -> E (1935410) gpio: gpio_set_level(226): GPIO output gpio_num error
02:14:44.247 -> : Solar Tracker Off
02:14:44.247 -> Battery Voltage= 0.00
02:14:44.316 -> Solar Current= 0.00
02:14:44.392 -> Battery Current= 0.00
02:14:44.424 -> Average Value Top : 0
02:14:44.456 -> Average Value Down : 4
02:14:44.488 -> Average Value Left : 4
02:14:44.520 -> Average Value Right : 0
02:14:44.520 -> Vertical Servo Position : 90
02:14:44.551 -> Horizontal Servo Position : 90

Okay, let me know when you’ve done that and I’ll take a look.

Pete.

Below is my revised Code

#define BLYNK_TEMPLATE_NAME "Anant Akshay Urja R5"
#define BLYNK_AUTH_TOKEN "hnAnk_AC5D_qzr04NQgqlILmstMGOpDj"
#define BLYNK_PRINT Serial

#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#include <WiFiClientSecure.h>

char ssid[] = "INTEX_CC3CBC"; // Honor 7X_1A08
char pass[] = "12345678"; //b42d9675

#include <ESP32Servo.h>
#include <time.h>

#include "ACS712.h"
#include "DHT.h"
#define DHTTYPE DHT22
#define DHTPIN 4 // Temparture and Humididty Sensor of Boost Converter
DHT dht(DHTPIN, DHTTYPE);
BlynkTimer timer;
unsigned long previousMillis = 0;
unsigned long interval = 30000;


const char* host = "script.google.com"; // Host & httpsPort
const int httpsPort = 443;
WiFiClientSecure Client;
const char* fingerprint = "0x56, 0xED, 0xC7, 0xDA, 0xBF, 0x51, 0x12, 0xC2, 0x79, 0x43, 0xC6, 0x01, 0xAB, 0xF7, 0x88, 0x98, 0x0F, 0x97, 0xB2, 0xB8";
String GAS_ID = "AKfycbwNJIa6FVXV8NMqXKrZXTl7PvKtHVjVH9X2LqqiG53MLeS6RerjVrLQNhFQnWiFi4L4"; //--> spreadsheet script ID

int solarvoltage = 34; // Solar Voltage Sensor
int batteryvoltage = 39; // Battery Voltage Sensor
float correctionfactor = 1.1;
float vout = 0.0;
float vin = 0.0;

float R1 = 30000 + 150000;
float R2 = 7500;
int value = 0.0;

int solarcurrent = 35; // Solar Current Sensor
int batterycurrent = 36; // Battery Current Sensor
ACS712  ACS(35, 5.0, 4095, 66);
double voltage = 0.0;
double current = 0.0;

// LDR pin connections
//name = analogpin;
int ldrlt =36; //LDR top left 
int ldrrt =39; //LDR top right
int ldrld =34; //LDR down left
int ldrrd =35; //LDR down right


Servo horizontal; // horizontal servo
int servoh = 90;  // start at degree    
int servohLimitHigh = 180;
int servohLimitLow = 0;

Servo vertical; // vertical servo
int servov = 90;  // start at degree    
int servovLimitHigh = 180;
int servovLimitLow = 0;

void initWiFi() {
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, pass);
  Serial.print("Connecting to WiFi ..");
  while (WiFi.status() != WL_CONNECTED) {
    Serial.print('.');
    //delay(1000);
  }
  unsigned long currentMillis = millis();
  //if WiFi is down, try reconnecting every CHECK_WIFI_TIME seconds
  if ((WiFi.status() != WL_CONNECTED) && (currentMillis - previousMillis >=interval)) {
    Serial.print(millis());
   Serial.println("Reconnecting to WiFi...");
   WiFi.disconnect();
   WiFi.reconnect();
   previousMillis = currentMillis;
  }
  Serial.println(WiFi.localIP());
}


BLYNK_WRITE(V0)
{
  int value = param.asInt();
  Serial.print(value);
  if(value == 0)
  {
    digitalWrite(23, LOW); // Solar Power On Off
    Serial.println(" : Solar Off : ");
  }
  if(value == 1)
  {
     digitalWrite(23, HIGH);
     Serial.println(" : Solar On : ");
  }
}

BLYNK_WRITE(V1)
{
  int value = param.asInt();
  Serial.print(value);
  if(value == 0)
  {
    digitalWrite(22, LOW); // Battery Charging Power On Off
    Serial.println(" : Battery Off");
  }
  if(value == 1)
  {
     digitalWrite(22, HIGH);
     Serial.println(" : Battery On");
  }
}

BLYNK_WRITE(V2)
{
  int value = param.asInt();
  Serial.print(value);
  if(value == 0)
  {
    digitalWrite(21, LOW); // Cooling Fan for Boost Converter Power On Off
    Serial.println(" : Fan Off");
  }
  if(value == 1)
  {
     digitalWrite(21, HIGH);
     Serial.println(" : Fan On");
  }
}

BLYNK_WRITE(V3)
{
  int value = param.asInt();
  Serial.print(value);
  if(value == 0)
  {
  digitalWrite(36, LOW); // LDR Top Left Solar Tracker Power On off
  digitalWrite(39, LOW); // LDR Top Right Solar Tracker Power On off
  digitalWrite(34, LOW); // LDR Bottom Left Solar Tracker Power On off
  digitalWrite(35, LOW); // LDR Bottom Right Solar Tracker Power On off
  Serial.println(" : Solar Tracker Off");
  }
  if(value == 1)
  {
  digitalWrite(36, HIGH); // LDR Top Left Solar Tracker Power On off
  digitalWrite(39, HIGH); // LDR Top Right Solar Tracker Power On off
  digitalWrite(34, HIGH); // LDR Bottom Left Solar Tracker Power On off
  digitalWrite(35, HIGH); // LDR Bottom Right Solar Tracker Power On off
  Serial.print(" : Solar Tracker On");
 }
   //delay(100);

}

void Sensorvalue1()
{
  int sdata = 0.0;
  value = analogRead(solarvoltage);
  vout = (value * 5.0) / 4096.0; 
  vin = vout / (R2/(R1+R2));
  vin = vin - correctionfactor;
if (vin < 0.01) {
  vin = 0.0;
}

  Serial.print("Solar Voltage= ");
  Serial.println(vin, 2);
  sdata = vin;
  Blynk.virtualWrite(V4, sdata);
  //delay(100);

}
void Sensorvalue2()
{
  int sdata = 0.0;
  value = analogRead(batteryvoltage);
  vout = (value * 3.3) / 4096.0; 
  vin = vout / (R2/(R1+R2));
  vin = vin - correctionfactor;
if (vin < 0.01) {
  vin = 0.0;
}
  Serial.print("Battery Voltage= ");
  Serial.println(vin, 2);
  sdata = vin;
  Blynk.virtualWrite(V5, sdata);
  //delay(100);
}


void Sensorvalue3(){
  for(int i = 0.0; i < 1000; i++);
  { 
      voltage = (voltage + (0.0264 * analogRead(35)));
  //delay (100);
      }
  voltage = voltage / 1000;
current = (voltage - 2.5) / 66;
  
  if (current < 0.01) {
  current = 0.0;
  }
  Serial.print("Solar Current= ");
  Serial.println(current, 2);
  Blynk.virtualWrite(V6, current);
  //delay(100);
}
void Sensorvalue4(){
  for(int i = 0.0; i < 1000; i++);
    { 
      voltage = (voltage + (0.0264 * analogRead(36)));
  //delay (100);
      }
  voltage = voltage / 1000;
current = (voltage - 2.5) / 66;
  
  if (current < 0.01) {
  current = 0.0; 
} 
  Serial.print("Battery Current= ");
  Serial.println(current, 2);
  Blynk.virtualWrite(V7, current);
  //delay(100);
  }
  
void Sensorvalue5()
{
  float t = dht.readTemperature(); 
  float h = dht.readHumidity();

  if (isnan(h) || isnan(t)) {
  Serial.println("Failed to read from DHT sensor!");
  return;
  }

    Blynk.virtualWrite(V8, t);
    Blynk.virtualWrite(V9, h);
    Serial.print("Temperature : ");
    Serial.println(t, 2);
    Serial.print("Humidity : ");
    Serial.println(h, 2);
    //delay(100);
}

void Sensorvalue7()
{
int lt = analogRead(ldrlt); // top left
int rt = analogRead(ldrrt); // top right
int ld = analogRead(ldrld); // down left
int rd = analogRead(ldrrd); // down right


int dtime = 10; // dtime=diffirence time, 
int tol = 100; // LDR Value tol=toleransi

int avt = (lt + rt) / 2; // average value top
int avd = (ld + rd) / 2; // average value down
int avl = (lt + ld) / 2; // average value left
int avr = (rt + rd) / 2; // average value right
int dvert = avt - avd; // check the diffirence of up and down
int dhoriz = avl - avr;// check the diffirence og left and rigt



  if (-1*tol > dvert || dvert > tol) 
 {
 if (avt > avd)
 { 
   servov = ++servov;
 if (servov > servovLimitHigh)
 {servov = servovLimitHigh;}
 }
 else if (avt < avd)
 {servov= --servov;
 if (servov < servovLimitLow)
 { servov = servovLimitLow;}
 }
 vertical.write(servov);
 }
if (-1*tol > dhoriz || dhoriz > tol) // check if the diffirence is in the tolerance else change horizontal angle
 {
 if (avl > avr)
 {
 servoh = --servoh;
 if (servoh < servohLimitLow)
 {
 servoh = servohLimitLow;
 }
 }
 else if (avl < avr)
 {
 servoh = ++servoh;
 if (servoh > servohLimitHigh)
 {
 servoh = servohLimitHigh;
 }
 }
 else if (avl = avr)
 {
 //delay(1000);
 }
 horizontal.write(servoh);
 }
    
Serial.print("Average Value Top : ");
Serial.println(avt);

Serial.print("Average Value Down : ");
Serial.println(avd);

Serial.print("Average Value Left : ");
Serial.println(avl);

Serial.print("Average Value Right : ");
Serial.println(avr);

Serial.print("Vertical Servo Position : ");
Serial.println(servov);

Serial.print("Horizontal Servo Position : ");
Serial.println(servoh);
}      

void setup()
{
Serial.begin(9600);
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
WiFi.begin(ssid, pass);

initWiFi();

dht.begin(); // Initialize the DHT sensor

horizontal.attach(18);
horizontal.attach(16);
horizontal.write(90);

vertical.attach(17);
vertical.attach(5);
vertical.write(90);


pinMode(23,OUTPUT); // Solar Power On Off
pinMode(22,OUTPUT); // Battery Charging Power On Off
pinMode(21,OUTPUT); // Cooling Fan for Boost Converter Power On Off
pinMode(36,INPUT); // LDR Top Left Solar Tracker Power On off
pinMode(39,INPUT); // LDR Top Right Solar Tracker Power On off
pinMode(34,INPUT); // LDR Bottom Left Solar Tracker Power On off
pinMode(35,INPUT); // LDR Bottom Right Solar Tracker Power On off
pinMode(35,INPUT); // Solar Current Sensor
pinMode(36,INPUT); // Battery Current Sensor
pinMode(34,INPUT); // Solar Voltage Sensor
pinMode(39,INPUT); // Battery Voltage Sensor
pinMode(4,INPUT); // Temparture and Humididty Sensor of Boost Converter

  timer.setInterval(50L,  Sensorvalue7); // Solar Tracker LDR and Servo
  timer.setInterval(123L,  Sensorvalue1); // Solar VOltage Sensor
  timer.setInterval(143L,  Sensorvalue2); // battery Voltage Sensor
  timer.setInterval(163L,  Sensorvalue3); // Solar Current Sensor
  timer.setInterval(183L,  Sensorvalue4); // Battery Current Sensor
  timer.setInterval(5000L,  Sensorvalue5); // Temprature and Humidity Sensor
}
void loop()
{
  timer.run(),
  Blynk.run(); 
  
  }```