สวัสดีครับอยากสอบถามเรื่อง 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");
}
}
//----------------------------------------------------------------------