Fuction on blynk did not operate only void setup is work

please help me I am newbie.
-I use arduino uno and esp-01s to receive wifi
-I had already AT firmware and change baudrate to 9600
-I had use separate power supply to esp-01s and connect gnd together
-I has use separate fuction represent void lopp.
-I didn’t add sever on blynk application
-the issue is another void doesn’t work only void setup is run
-It can connect to wifi and disconnect suddenly
CODE:

#include <ESP8266_Lib.h>
#include <BlynkSimpleShieldEsp8266.h>
char auth[] = "CgPPXBuq9JAk08H_YqGA8c_Bg97oHw6Z";
char ssid[] = "true_homeppp9";
char pass[] = "08182854039";
#include <SoftwareSerial.h>
SoftwareSerial EspSerial(2, 3); // RX, TX
#define ESP8266_BAUD 9600
ESP8266 wifi(&EspSerial);
BlynkTimer timer;
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2); 
#define Fan 4
WidgetLED led0(V0);
WidgetLED led2(V2);
WidgetLED led1(V1);
int ledPinR = 13; // MQ135
int ledPinG = 12; // MQ2
int ledPinY = 8; // MQ7
int analogPin = 0; // MQ135
int analogPin1 = 1; // MQ2
int analogPin2 = 2; // MQ7
int Relay1 = 6;// IN1(BUZZER)
int Relay2 = 5;// IN2(SOLENOID VALVE)
int val = 0; // MQ135
int MQ2 = 0; // MQ2
int MQ7 = 0; // MQ7
void sensorDataSend()
{
  val = analogRead(A0);
  MQ2 = analogRead(A1);
  MQ7 = analogRead(A2);// reading sensor from analog pin
  Blynk.virtualWrite(V3, val);
  Blynk.virtualWrite(V4, MQ2);
  Blynk.virtualWrite(V5, MQ7);// sending sensor value to Blynk app
  if ((val > 45) && (MQ2 >50 ) && (MQ7 > 30)) {
    led0.on();
    led1.on();
    led2.on();
  }
  else if ((MQ2 >50 ) && (MQ7 > 30) && (val < 45)) { 
    led1.on();
    led2.on();
    led0.off();
  }
  else if ((val > 45) && (MQ7 > 30) && (MQ2 < 50)) { 
    led0.on();
    led2.on();
    led1.off();
  }
  else if ((val > 45) && (MQ2 > 50) && (MQ7 < 30)) { 
    led0.on();
    led1.on();
    led2.off();
  }
   else if ((val > 45) && (MQ2 < 50) && (MQ7 < 30)) { 
    led0.on();
    led2.off();
    led1.off();
  }
  else if ((val < 45) && (MQ2 > 50) && (MQ7 < 30)) { 
    led1.on();
    led2.off();
    led0.off();
  }
  else if ((MQ7 > 30) && (MQ2 < 50) && (val < 45)) { 
    led2.on();
    led1.off();
    led0.off();
  }
  else 
  {
    led0.off();
    led1.off();
    led2.off();
}
}
void myScale()
{
int val = map(analogRead(0), 0, 1000, 0, 100);
int MQ2 = map(analogRead(1), 0, 1000, 0, 100);
int MQ7 = map(analogRead(2), 0, 600, 0, 100);
Serial.print("val = "); 
 Serial.println(val);
 Serial.print("MQ2 = "); 
  Serial.println(MQ2);
  Serial.print("MQ7 = "); 
  Serial.println(MQ7);  
  lcd.print("GL:");
  lcd.print(val);
  lcd.print(" ");
  lcd.print(MQ2);
  lcd.print(" ");
  lcd.print(MQ7);
  lcd.print(" ");
}
void myTimerEvent()
{
     if ((val > 45) && (MQ2 >50 ) && (MQ7 > 30)) {
    digitalWrite(ledPinR, HIGH);
    digitalWrite(ledPinG, HIGH);
    digitalWrite(ledPinY, HIGH);
    digitalWrite(Fan , LOW);
    delay(1000);
    digitalWrite(Relay1, LOW);// do no
    digitalWrite(Relay2, LOW);// do no
    lcd.setCursor(3,1);
    lcd.print("ALL SENSOR");
  delay(500);
  lcd.clear();
  }
  else if ((MQ2 >50 ) && (MQ7 > 30) && (val < 45)) { 
    digitalWrite(ledPinG, HIGH);
    digitalWrite(ledPinY, HIGH);
    digitalWrite(Fan , LOW);
    delay(1000);
   digitalWrite(Relay1, LOW);// do no
   digitalWrite(Relay2, LOW);// do no
    lcd.setCursor(0,1);
    lcd.print("GAS MQ2andMQ7");
  delay(500);
  lcd.clear();
  }
  else if ((val > 45) && (MQ7 > 30) && (MQ2 < 50)) {
    digitalWrite(ledPinR, HIGH);// สั่งให้ LED ติดสว่าง
    digitalWrite(ledPinY, HIGH);
    digitalWrite(Fan , LOW);
    delay(1000);
    digitalWrite(Relay1, LOW);// do no
    digitalWrite(Relay2, LOW);// do no
    lcd.setCursor(0,1);
    lcd.print("GAS MQ135andMQ7");
  delay(500);
  lcd.clear();
  }
  else if ((val > 45) && (MQ2 > 50) && (MQ7 < 30)) { 
    digitalWrite(ledPinR, HIGH);
    digitalWrite(ledPinG, HIGH);
    digitalWrite(Fan , LOW);
    delay(1000);
    digitalWrite(Relay1, LOW);// do no
    digitalWrite(Relay2, LOW);// do no
    lcd.setCursor(0,1);
    lcd.print("GAS MQ135andMQ2");
  delay(500);
  lcd.clear();
  }
   else if ((val > 45) && (MQ2 < 50) && (MQ7 < 30)) { 
    digitalWrite(ledPinR, HIGH);
    digitalWrite(Fan , LOW);
    delay(1000);
    digitalWrite(Relay1, LOW);// do no
    digitalWrite(Relay2, LOW);// do no
    lcd.setCursor(3,1);
    lcd.print("GAS MQ135");
    delay(500);
    lcd.clear();
  }
  else if ((val < 45) && (MQ2 > 50) && (MQ7 < 30)) { 
    digitalWrite(ledPinG, HIGH);
    digitalWrite(Fan , LOW);
    delay(1000);
    digitalWrite(Relay1, LOW);// do no
    digitalWrite(Relay2, LOW);// do no
    lcd.setCursor(4,1);
    lcd.print("GAS MQ2");
    delay(500);
    lcd.clear();
  }
  else if ((MQ7 > 30) && (MQ2 < 50) && (val < 45)) { 
    digitalWrite(ledPinY, HIGH);
    digitalWrite(Fan , LOW);
    delay(1000);
    digitalWrite(Relay1, LOW);// do no
    digitalWrite(Relay2, LOW);// do no
    lcd.setCursor(4,1);
    lcd.print("GAS MQ7");
    delay(500);
    lcd.clear();
  }
  else 
  {
    digitalWrite(ledPinR, LOW); 
    digitalWrite(ledPinG, LOW);
    digitalWrite(ledPinY, LOW);
    digitalWrite(Fan , HIGH);
    delay(1000);
    digitalWrite(Relay1, HIGH); // do nc
    digitalWrite(Relay2, HIGH); // do nc
    lcd.setCursor(5,1);
    lcd.print("NORMAL");
    delay(3000);
    lcd.clear();
}
delay(100);
}
void setup()
{
  Serial.begin(9600);
    lcd.init();// initialize the lcd 
  lcd.init();// Print a message to the LCD.
  lcd.setBacklight(0); 
  lcd.setCursor(4,0);
    lcd.print("SYSTEM ON");
    delay(1000);
      lcd.clear();
    lcd.print("GL=GAS LEVEL");
    delay(500);
     lcd.setCursor(0,1);
     lcd.print("GL=MQ135 MQ2 MQ7");
    delay(1000);
    lcd.clear();
    lcd.setCursor(0,1);
    lcd.print("READY...........");
    delay(1000);
    lcd.clear();
  pinMode(analogPin, INPUT);
  pinMode(analogPin1, INPUT);
  pinMode(analogPin2, INPUT);
  pinMode(ledPinR, OUTPUT);
  pinMode(ledPinG,OUTPUT);
  pinMode(ledPinY, OUTPUT);// sets the pin as output
  pinMode(Relay1,OUTPUT);
  pinMode(Relay2,OUTPUT);
  pinMode(Fan, OUTPUT);
  digitalWrite(Fan , HIGH);
  digitalWrite(Relay1, LOW);// do no
  digitalWrite(Relay2, HIGH);// do nc
  EspSerial.begin(ESP8266_BAUD);
  delay(10);
  Blynk.begin(auth, wifi, ssid, pass);
// Setup a function to be called every second
  timer.setInterval(1000L, myScale);
  timer.setInterval(1000L, myTimerEvent);
  timer.setInterval(1000L, sensorDataSend);
}

void loop()
{
  Blynk.run();
  timer.run(); // Initiates BlynkTimer
}```

@rayzy12345 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:
```

Pete.

What does your serial monitor show?

Pete.

You have way too many delays in your myTimerEvent()! Your sketch basically stops working for 1600-4100 ms each time you call the function, which is more often than it takes for it to finish: timer.setInterval(1000L, myTimerEvent);

Try to remove the delays and set your times to run less often and see if it helps!

1 Like

-I had remove all lcd code and it can connect with blykn with no problem.
-but led on BLYKN are slowy response how I can slove it??(I want void myScale response fast as BLYNK gauge)

#include <ESP8266_Lib.h>
#include <BlynkSimpleShieldEsp8266.h>
char auth[] = " -u4Z62ouoeXD3FMLfzk9iKtZd-iR8Y3Y";
char ssid[] = "true_homeppp9";
char pass[] = "08182854039";
#include <SoftwareSerial.h>
SoftwareSerial EspSerial(2, 3); // RX, TX
#define ESP8266_BAUD 9600
ESP8266 wifi(&EspSerial);
BlynkTimer timer;
#define Fan 4
WidgetLED led0(V0);
WidgetLED led2(V2);
WidgetLED led1(V1);
int ledPinR = 13; // MQ135
int ledPinG = 12; // MQ2
int ledPinY = 8; // MQ7
int analogPin = 0; // MQ135
int analogPin1 = 1; // MQ2
int analogPin2 = 2; // MQ7
int Relay1 = 6;// IN1(BUZZER)
int Relay2 = 5;// IN2(SOLENOID VALVE)
int val = 0; // MQ135
int MQ2 = 0; // MQ2
int MQ7 = 0; // MQ7
void myScale()
{
int val = map(analogRead(0), 0, 1000, 0, 100);
int MQ2 = map(analogRead(1), 0, 1000, 0, 100);
int MQ7 = map(analogRead(2), 0, 600, 0, 100);
Serial.print("val = "); 
 Serial.println(val);
 Serial.print("MQ2 = "); 
  Serial.println(MQ2);
  Serial.print("MQ7 = "); 
  Serial.println(MQ7);
    Blynk.virtualWrite(V3, val);
  Blynk.virtualWrite(V4, MQ2);
  Blynk.virtualWrite(V5, MQ7);// sending sensor value to Blynk app
  if ((val > 45) && (MQ2 >50 ) && (MQ7 > 30)) { // สามารถกำหนดปรับค่าได้ตามสถานที่ต่าง.
    led0.on();
    led1.on();
    led2.on();
  }
  else if ((MQ2 >50 ) && (MQ7 > 30) && (val < 45)) { // สามารถกำหนดปรับค่าได้ตามสถานที่ต่างๆ
    led1.on();
    led2.on();
    led0.off();
  }
  else if ((val > 45) && (MQ7 > 30) && (MQ2 < 50)) { // สามารถกำหนดปรับค่าได้ตามสถานที่ต่างๆ
    led0.on();
    led2.on();
    led1.off();
  }
  else if ((val > 45) && (MQ2 > 50) && (MQ7 < 30)) { // สามารถกำหนดปรับค่าได้ตามสถานที่ต่างๆ
    led0.on();
    led1.on();
    led2.off();
  }
   else if ((val > 45) && (MQ2 < 50) && (MQ7 < 30)) { // สามารถกำหนดปรับค่าได้ตามสถานที่ต่างๆ
    led0.on();
    led2.off();
    led1.off();
  }
  else if ((val < 45) && (MQ2 > 50) && (MQ7 < 30)) { // สามารถกำหนดปรับค่าได้ตามสถานที่ต่างๆ
    led1.on();
    led2.off();
    led0.off();
  }
  else if ((MQ7 > 30) && (MQ2 < 50) && (val < 45)) { // สามารถกำหนดปรับค่าได้ตามสถานที่ต่างๆ
    led2.on();
    led1.off();
    led0.off();
  }
  else 
  {
    led0.off();
    led1.off();
    led2.off();
}
}
void myTimerEvent()
{
     if ((val > 45) && (MQ2 >50 ) && (MQ7 > 30)) { // สามารถกำหนดปรับค่าได้ตามสถานที่ต่าง
    digitalWrite(ledPinR, HIGH);// สั่งให้ LED ติดสว่าง
    digitalWrite(ledPinG, HIGH);
    digitalWrite(ledPinY, HIGH);
    digitalWrite(Fan , LOW);
    delay(500);
    digitalWrite(Relay1, LOW);// do no
    digitalWrite(Relay2, LOW);// do no
  }
  else if ((MQ2 >50 ) && (MQ7 > 30) && (val < 45)) { // สามารถกำหนดปรับค่าได้ตามสถานที่ต่างๆ
    digitalWrite(ledPinG, HIGH);
    digitalWrite(ledPinY, HIGH);
    digitalWrite(Fan , LOW);
    delay(500);
   digitalWrite(Relay1, LOW);// do no
   digitalWrite(Relay2, LOW);// do no
  }
  else if ((val > 45) && (MQ7 > 30) && (MQ2 < 50)) { // สามารถกำหนดปรับค่าได้ตามสถานที่ต่างๆ
    digitalWrite(ledPinR, HIGH);// สั่งให้ LED ติดสว่าง
    digitalWrite(ledPinY, HIGH);
    digitalWrite(Fan , LOW);
    delay(500);
    digitalWrite(Relay1, LOW);// do no
    digitalWrite(Relay2, LOW);// do no
  }
  else if ((val > 45) && (MQ2 > 50) && (MQ7 < 30)) { // สามารถกำหนดปรับค่าได้ตามสถานที่ต่างๆ
    digitalWrite(ledPinR, HIGH);// สั่งให้ LED ติดสว่าง
    digitalWrite(ledPinG, HIGH);
    digitalWrite(Fan , LOW);
    delay(500);
    digitalWrite(Relay1, LOW);// do no
    digitalWrite(Relay2, LOW);// do no
  }
   else if ((val > 45) && (MQ2 < 50) && (MQ7 < 30)) { // สามารถกำหนดปรับค่าได้ตามสถานที่ต่างๆ
    digitalWrite(ledPinR, HIGH);// สั่งให้ LED ติดสว่าง
    digitalWrite(Fan , LOW);
    delay(500);
    digitalWrite(Relay1, LOW);// do no
    digitalWrite(Relay2, LOW);// do no
  }
  else if ((val < 45) && (MQ2 > 50) && (MQ7 < 30)) { // สามารถกำหนดปรับค่าได้ตามสถานที่ต่างๆ
    digitalWrite(ledPinG, HIGH);// สั่งให้ LED ติดสว่าง
    digitalWrite(Fan , LOW);
    delay(500);
    digitalWrite(Relay1, LOW);// do no
    digitalWrite(Relay2, LOW);// do no
  }
  else if ((MQ7 > 30) && (MQ2 < 50) && (val < 45)) { // สามารถกำหนดปรับค่าได้ตามสถานที่ต่างๆ
    digitalWrite(ledPinY, HIGH);// สั่งให้ LED ติดสว่าง
    digitalWrite(Fan , LOW);
    delay(500);
    digitalWrite(Relay1, LOW);// do no
    digitalWrite(Relay2, LOW);// do no
  }
  else 
  {
    digitalWrite(ledPinR, LOW); // สั่งให้ LED ดับ
    digitalWrite(ledPinG, LOW);
    digitalWrite(ledPinY, LOW);
    digitalWrite(Fan , HIGH);
    delay(500);
    digitalWrite(Relay1, HIGH); // do nc
    digitalWrite(Relay2, HIGH); // do nc
}
delay(100);
}
void setup()
{
  Serial.begin(9600);
  pinMode(analogPin, INPUT);
  pinMode(analogPin1, INPUT);
  pinMode(analogPin2, INPUT);
  pinMode(ledPinR, OUTPUT);
  pinMode(ledPinG,OUTPUT);
  pinMode(ledPinY, OUTPUT);// sets the pin as output
  pinMode(Relay1,OUTPUT);
  pinMode(Relay2,OUTPUT);
  pinMode(Fan, OUTPUT);
  digitalWrite(Fan , HIGH);
  digitalWrite(Relay1, LOW);// do no
  digitalWrite(Relay2, HIGH);// do nc
  EspSerial.begin(ESP8266_BAUD);
  delay(10);
  Blynk.begin(auth, wifi, ssid, pass);
// Setup a function to be called every second
  timer.setInterval(1000L, myScale);
  timer.setInterval(10000L, myTimerEvent);
}

void loop()
{
  Blynk.run();
  timer.run(); // Initiates BlynkTimer
}```

What happens if you run myScale() just once… say every 5 seconds? And are the 500 ms delay in myTimerEvent() really necessary?

Simplify the if then tests to reduce time used.

Remove delay(500).

looks like the logic for mytimerevent can be reduced to something like

    digitalWrite(ledPinR, (val > 45)); 
    digitalWrite(ledPinG, (MQ2 >50 ));
    digitalWrite(ledPinY, (MQ7 > 30));
   if ((val > 45) || (MQ2 >50 ) || (MQ7 > 30)) {
    digitalWrite(Fan , HIGH);
    digitalWrite(Relay1, HIGH); // do nc
    digitalWrite(Relay2, HIGH); // do nc
} else {
    digitalWrite(Fan , LOW);
    digitalWrite(Relay1, LOW); // do no
    digitalWrite(Relay2, LOW); // do no
}



I am sure myscale can be similarly reduced.

I have not tried the program so I can not be certain that I have not made any mistakes!!

Also it looks like the val, mq2 and mq7 Relay1 and Relay2 values could be global reducing the setup time and memory management.

I hope this makes sense to you, Good luck

It also looks like some of your pins are setup as vars instead of defines. When things are organized it is easier to find problems.

I would also create constants for the cutoffs instead of magic numbers. That way you can change them if you need to without going through the entire code.

#define Fan 4
#define ledPinR 13; // MQ135
#define ledPinG 12; // MQ2
#define ledPinY 8; // MQ7
#define analogPin 0; // MQ135
#define analogPin1 1; // MQ2
#define analogPin2 2; // MQ7
#define Relay1 6;  // IN1(BUZZER)
#define Relay2 5;  // IN2(SOLENOID VALVE)

WidgetLED led0(V0);
WidgetLED led2(V2);
WidgetLED led1(V1);

int val = 0; // MQ135
int MQ2 = 0; // MQ2
int MQ7 = 0; // MQ7

Also probably not a good idea to publish your Token ssid and password !!!