สวัสดีครับอยากสอบถามเรื่อง code หน่อยครับ

สวัสดีครับอยากสอบถามเรื่อง code หน่อยครับ ตอนนี้เราทำโปรเจควัดค่าความชื้นในดินและค่าฝุ่น โดยใช้ Node MCU 8266 v3 โดยใช้ตัวขยายขา Analog PCF8591 ตอนนี้ติดปัญหาคือค่าฝุ่นเบี่ยงมากครับ บางครั้งก็ไม่รับค่าเลย อยากสอบถามว่า Code ผมผิดตรงไหนครับ

//---------------------------------------------------------------
#define BLYNK_PRINT Serial
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include "PM_Sensor.h"
#include <TridentTD_LineNotify.h>
#include <DHT.h>
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>


#define LINE_TOKEN "B6W46tCzFZ4ZDRT1OZp1hEya9C7ydwVGrFovHo8imHL"


#define OLED_RESET 16 //LED_BUILTIN  //4
Adafruit_SSD1306 display(OLED_RESET);


#define relay4 D4
int SR = 0; // ประกาศตัวแปร SR มีค่าเท่ากับ 0
int temp = 0; // ประกาศตัวแปร temp มีค่าเท่ากับ 0

#define input_sensor V5 

int sharpLEDPin = D3; 
int sharpVoPin = A0; 

char auth[] = "b6U8yQyr9w82arrummwJ9n1cQY7XRxZR";
char ssid[] = "oppo1";
char pass[] = "12345678";

BlynkTimer timer;

BLYNK_READ(V2)
{
  Blynk.virtualWrite(V2, temp); // แสดงค่า Temp ออกช่องทาง V0
}

//----------------------------------------------------------------------
//#include "Wire.h"
#define PCF8591 (0x90 >> 1)
byte adcvalue0;

//----------------------------------------------------------------------
void setup()
{
  Serial.begin(115200);
  //timer.setInterval(1000, Sensor);
  display.begin(SSD1306_SWITCHCAPVCC, 0x3c);
  LINE.setToken(LINE_TOKEN);
  
  Blynk.begin(auth, ssid, pass);
  //pinMode(sharpLEDPin, OUTPUT);

   pinMode(relay4, OUTPUT);

  digitalWrite(relay4, HIGH);

  //Wire.begin();
}

//----------------------------------------------------------------------
void loop()
{
  Blynk.run();
  PM_loop();
  Sensor_loop();
}
//----------------------------------------------------------------------
void Sensor_loop() {
  Wire.beginTransmission(PCF8591);
  Wire.write(0x04);
  Wire.endTransmission();
  Wire.requestFrom(PCF8591, 5);
   
  adcvalue0=Wire.read();
  SR = (int)adcvalue0;
  temp = map(SR, 255, 0, 0, 100); // ตัวแปล Temp คือ แปลงค่าของตัวแปร SR จาก 1023 ถึง 0 เป็น 0 ถึง 100 
  Blynk.virtualWrite(V1, String(temp));
  Serial.print("Soil Moisture = ");
  Serial.print(temp);
  Serial.println(" %");

  if (temp <= 60) {  //ตั้งค่า % ที่ต้องการจะรดน้ำต้นไม้
    digitalWrite(relay4, HIGH);
  }

  if (temp >=70) {
    digitalWrite(relay4, LOW);
  }
  delay(50); 
  timer.run(); 
  
  }

//----------------------------------------------------------------------
int ton=0;
void PM_loop(){
digitalWrite(sharpLEDPin, LOW);
delayMicroseconds(280);
int VoRaw = analogRead(sharpVoPin);
digitalWrite(sharpLEDPin, HIGH);
delayMicroseconds(280);
#ifdef PRINT_RAW_DATA
Serial.println("");
#endif 
 
float Vo = VoRaw;

#ifdef USE_AVG
VoRawTotal += VoRaw;
VoRawCount++;
if ( VoRawCount >= N ) {
Vo = 1.0 * VoRawTotal / N;
VoRawCount = 0;
VoRawTotal = 0;
} else {
return;
}
#endif 
 
Vo = Vo / 1024.0 * 3.3;
 
float dV = Vo - Voc;
if ( dV < 0 ) {
dV = 0;
Voc = Vo;
}
float dustDensity = dV / K * 100.0;
send_blynk(dustDensity);
  if(ton == 0){tone(D5, 0, 50);}
  if(ton == 1){tone(D5, 1000, 50);delay(50);tone(D5, 0, 50);delay(50);}
  if(ton == 2){tone(D5, 2500, 50);delay(50);tone(D5, 0, 50);delay(50);}
}
//----------------------------------------------------------------------
void send_blynk(float Density){
   Blynk.virtualWrite(input_sensor,Density);
    display.clearDisplay();
     display.setTextSize(3);
    display.setTextColor(WHITE);
    display.setCursor(0,16);
    display.println(Density);
    display.setTextSize(1);
    display.setTextColor(WHITE);
    display.setCursor(85,0);
    display.println("ug/m3");
    display.display();
   
   if(Density > 0.0 && Density < 26.0){ ton=0;
   Blynk.setProperty(input_sensor,"label","AQI อากาศดีมาก"); 
    Blynk.setProperty(input_sensor,"color","#50c9f4");  }
   if(Density > 25 && Density < 51.0){ ton=0;
   Blynk.setProperty(input_sensor,"label","AQI อากาศดี"); 
    Blynk.setProperty(input_sensor,"color","#78c150"); } 
   if(Density > 50 && Density < 101.0){ ton=0;
   Blynk.setProperty(input_sensor,"label","AQI อากาศปานกลาง"); 
    Blynk.setProperty(input_sensor,"color","#fff46b");   }
   if(Density > 100 && Density < 201.0){ ton=1;
   Blynk.setProperty(input_sensor,"label","AQI อากาศเริ่มมีผลกระทบต่อสุขภาพ"); 
   Blynk.setProperty(input_sensor,"color","#f89836"); 
    }
   if(Density > 200){ ton=2;
   Blynk.setProperty(input_sensor,"label","AQI อากาศมีผลกระทบต่อสุขภาพ"); 
   Blynk.setProperty(input_sensor,"color","#ec363a"); 
   }
   
  }

//----------------------------------------------------------------------

  1. หมายถึงเพี้ยน รึป่าวครับ
  2. ตอนที่มันเพี้ยน มันได้เท่าไหร่เมื่อเทียบกับ ปกติ
  3. เรามีเครื่องมือเทียบหรือไม่ ว่ามันเพี้ยนจริง