โค้ด Smart Farm ได้มาจากเว็บนอกโค้ด Verify ไม่ผ่านครับช่วยหน่อยครับ

รบกวนผู้เชี่ยวชาญช่วยหน่อยครับผม ขอบคุณครับ
รูปภาพตอน error ครับ

ตัวโค้ด

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

char auth[] = "";
char ssid[] = "";
char pass[] = "";

#define potPin A0
#define DHTPIN 0
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);

BlynkTimer timer;

WidgetLCD lcd(V1);

int relay1 = 4;
int relay2 = 2;
int relay3 = 3;

MODE mode = unknown;

struct valve_t {
  int pin;
  bool manual; // false … automatic
  bool state;
};

void sendSensor()
{
  float h = dht.readHumidity();
  float t = dht.readTemperature();

  if (isnan(h) || isnan(t)) {
    Serial.println("Failed to read from DHT sensor!");
    return;
  }
  Blynk.virtualWrite(V5, t);
  Blynk.virtualWrite(V6, h);
}
void Starup() {
  int Hum = analogRead(A0);
  float tegangan = Hum * (5.0 / 1023.0);
  Serial.print("Nilai Potensio : ");
  Serial.println(Hum);

  Blynk.virtualWrite(V1, Hum);
  lcd.print(0, 0, "Moisture:");
  lcd.print(11, 0, Hum);

  if (Hum >= 150 && Hum <= 300) {
    Blynk.virtualWrite(V1, Hum);
    lcd.print(0, 1, "Status:");
    lcd.print(8, 1, "Good");
  }
  else if (Hum >= 300 && Hum <= 500) {
    Blynk.virtualWrite(V1, Hum);
    lcd.print(0, 1, "Status:");
    lcd.print(8, 1, "Fair");
  }
  else if (Hum >= 500 && Hum <= 700) {
    Blynk.virtualWrite(V1, Hum);
    lcd.print(0, 1, "Status:");
    lcd.print(8, 1, "Poor");
  }
}

BLYNK_WRITE(V0) {
  switch (mode = (MODE)param.asInt())
  {
    case manual:
      Blynk.virtualWrite("Mode: Manual");
      break;
    case automatic:
      Blynk.virtualWrite("Mode: Automatic");
      break;
    default:
   mode = unknown;
  }
  setMode(mode);
}
void blynkWriteManual(int nr, int value) {
  char msg[32];
  valve[nr].manual = value;
}
BLYNK_WRITE(V11) {
  if (blynkWriteManual(0, param.asInt() == HIGH)); {
    digitalWrite(relay1, HIGH);
    digitalWrite(relay2, HIGH);
  }
  else {
    digitalWrite(relay1, LOW);
    digitalWrite(relay2, LOW);
  }
}
BLYNK_WRITE(V12) {
  if (blynkWriteManual(2, param.asInt() == HIGH)); {
    digitalWrite(relay3, HIGH);
    digitalWrite(relay2, HIGH);
  }
  else {
    digitalWrite(relay3, LOW);
    digitalWrite(relay2, LOW);
  }
}

void blynkWriteAuto(int nr, const BlynkParam& param) {
  int Hum = analogRead(A0);
  float tegangan = Hum * (5.0 / 1023.0);
  if (Hum >= 150) {
    digitalWrite(relay1, HIGH);
    digitalWrite(relay2, HIGH);
  }
  else {
    digitalWrite(relay1, LOW);
    digitalWrite(relay2, LOW);
  }
}
void setup() {

  Serial.begin(9600);

  Blynk.begin(auth, ssid, pass);
  dht.begin();
  timer.setInterval(1000L, Starup);
  timer.setInterval(1000L, sendSensor);
  lcd.clear();

  pinMode(relay1, OUTPUT);
  pinMode(relay2, OUTPUT);
  pinMode(relay3, OUTPUT);
}

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

ไฮไลท์แล้วครับ

อันนี้คืออะไรอ่ะครับ

ภาพ

อธิบายหน่อย

ผมไม่ทราบเหมือนกันครับมันให้มา ผมอยากจะให้มันเปลี่ยนโหมดเป็น Auto หรือ manaul ได้ครับ มันขึ้น error ว่า ‘MODE’ does not name a type ครับ หรือว่ามันผิดที่บรรทัดอื่นผมก็ไม่แน่ใจครับ หรือพี่มีโค้ดใหม่แนะนำมั้ยครับ :sob: :sob:

Copy error เต็มมาวางหน่อย

SmartFarm1:22:1: error: 'MODE' does not name a type
 MODE mode = unknown;
 ^
C:\Users\acer\Desktop\SmartFarm1\SmartFarm1.ino: In function 'void BlynkWidgetWrite0(BlynkReq&, const BlynkParam&)':
SmartFarm1:70:11: error: 'mode' was not declared in this scope
   switch (mode = (MODE)param.asInt())
           ^
SmartFarm1:70:19: error: 'MODE' was not declared in this scope
   switch (mode = (MODE)param.asInt())
                   ^
SmartFarm1:70:24: error: expected ')' before 'param'
   switch (mode = (MODE)param.asInt())
                        ^
SmartFarm1:72:10: error: 'manual' was not declared in this scope
     case manual:
          ^
SmartFarm1:73:40: error: no matching function for call to 'BlynkWifi::virtualWrite(const char [13])'
       Blynk.virtualWrite("Mode: Manual");
                                        ^
C:\Users\acer\Desktop\SmartFarm1\SmartFarm1.ino:73:40: note: candidates are:
In file included from C:\Users\acer\Documents\Arduino\libraries\Blynk\src/BlynkApiArduino.h:14:0,
                 from C:\Users\acer\Documents\Arduino\libraries\Blynk\src/BlynkSimpleEsp8266.h:24,
                 from C:\Users\acer\Desktop\SmartFarm1\SmartFarm1.ino:2:
C:\Users\acer\Documents\Arduino\libraries\Blynk\src/Blynk/BlynkApi.h:76:10: note: template<class ... Args> void BlynkApi<Proto>::virtualWrite(int, Args ...) [with Args = {Args ...}; Proto = BlynkProtocol<BlynkArduinoClientGen<Client> >]
     void virtualWrite(int pin, Args... values) {
          ^
C:\Users\acer\Documents\Arduino\libraries\Blynk\src/Blynk/BlynkApi.h:76:10: note:   template argument deduction/substitution failed:
C:\Users\acer\Desktop\SmartFarm1\SmartFarm1.ino:73:40: note:   cannot convert '"Mode: Manual"' (type 'const char [13]') to type 'int'
       Blynk.virtualWrite("Mode: Manual");
                                        ^
In file included from C:\Users\acer\Documents\Arduino\libraries\Blynk\src/BlynkApiArduino.h:14:0,
                 from C:\Users\acer\Documents\Arduino\libraries\Blynk\src/BlynkSimpleEsp8266.h:24,
                 from C:\Users\acer\Desktop\SmartFarm1\SmartFarm1.ino:2:
C:\Users\acer\Documents\Arduino\libraries\Blynk\src/Blynk/BlynkApi.h:106:10: note: void BlynkApi<Proto>::virtualWrite(int, const BlynkParam&) [with Proto = BlynkProtocol<BlynkArduinoClientGen<Client> >]
     void virtualWrite(int pin, const BlynkParam& param) {
          ^
C:\Users\acer\Documents\Arduino\libraries\Blynk\src/Blynk/BlynkApi.h:106:10: note:   candidate expects 2 arguments, 1 provided
C:\Users\acer\Documents\Arduino\libraries\Blynk\src/Blynk/BlynkApi.h:110:10: note: void BlynkApi<Proto>::virtualWrite(int, const BlynkParamAllocated&) [with Proto = BlynkProtocol<BlynkArduinoClientGen<Client> >]
     void virtualWrite(int pin, const BlynkParamAllocated& param) {
          ^
C:\Users\acer\Documents\Arduino\libraries\Blynk\src/Blynk/BlynkApi.h:110:10: note:   candidate expects 2 arguments, 1 provided
SmartFarm1:75:10: error: 'automatic' was not declared in this scope
     case automatic:
          ^
SmartFarm1:76:43: error: no matching function for call to 'BlynkWifi::virtualWrite(const char [16])'
       Blynk.virtualWrite("Mode: Automatic");
                                           ^
C:\Users\acer\Desktop\SmartFarm1\SmartFarm1.ino:76:43: note: candidates are:
In file included from C:\Users\acer\Documents\Arduino\libraries\Blynk\src/BlynkApiArduino.h:14:0,
                 from C:\Users\acer\Documents\Arduino\libraries\Blynk\src/BlynkSimpleEsp8266.h:24,
                 from C:\Users\acer\Desktop\SmartFarm1\SmartFarm1.ino:2:
C:\Users\acer\Documents\Arduino\libraries\Blynk\src/Blynk/BlynkApi.h:76:10: note: template<class ... Args> void BlynkApi<Proto>::virtualWrite(int, Args ...) [with Args = {Args ...}; Proto = BlynkProtocol<BlynkArduinoClientGen<Client> >]
     void virtualWrite(int pin, Args... values) {
          ^
C:\Users\acer\Documents\Arduino\libraries\Blynk\src/Blynk/BlynkApi.h:76:10: note:   template argument deduction/substitution failed:
C:\Users\acer\Desktop\SmartFarm1\SmartFarm1.ino:76:43: note:   cannot convert '"Mode: Automatic"' (type 'const char [16]') to type 'int'
       Blynk.virtualWrite("Mode: Automatic");
                                           ^
In file included from C:\Users\acer\Documents\Arduino\libraries\Blynk\src/BlynkApiArduino.h:14:0,
                 from C:\Users\acer\Documents\Arduino\libraries\Blynk\src/BlynkSimpleEsp8266.h:24,
                 from C:\Users\acer\Desktop\SmartFarm1\SmartFarm1.ino:2:
C:\Users\acer\Documents\Arduino\libraries\Blynk\src/Blynk/BlynkApi.h:106:10: note: void BlynkApi<Proto>::virtualWrite(int, const BlynkParam&) [with Proto = BlynkProtocol<BlynkArduinoClientGen<Client> >]
     void virtualWrite(int pin, const BlynkParam& param) {
          ^
C:\Users\acer\Documents\Arduino\libraries\Blynk\src/Blynk/BlynkApi.h:106:10: note:   candidate expects 2 arguments, 1 provided
C:\Users\acer\Documents\Arduino\libraries\Blynk\src/Blynk/BlynkApi.h:110:10: note: void BlynkApi<Proto>::virtualWrite(int, const BlynkParamAllocated&) [with Proto = BlynkProtocol<BlynkArduinoClientGen<Client> >]
     void virtualWrite(int pin, const BlynkParamAllocated& param) {
          ^
C:\Users\acer\Documents\Arduino\libraries\Blynk\src/Blynk/BlynkApi.h:110:10: note:   candidate expects 2 arguments, 1 provided
SmartFarm1:79:11: error: 'unknown' was not declared in this scope
    mode = unknown;
           ^
SmartFarm1:81:11: error: 'mode' was not declared in this scope
   setMode(mode);
           ^
SmartFarm1:81:15: error: 'setMode' was not declared in this scope
   setMode(mode);
               ^
C:\Users\acer\Desktop\SmartFarm1\SmartFarm1.ino: In function 'void blynkWriteManual(int, int)':
SmartFarm1:85:3: error: 'valve' was not declared in this scope
   valve[nr].manual = value;
   ^
C:\Users\acer\Desktop\SmartFarm1\SmartFarm1.ino: In function 'void BlynkWidgetWrite11(BlynkReq&, const BlynkParam&)':
SmartFarm1:88:48: error: could not convert 'blynkWriteManual(0, ((& param)->BlynkParam::asInt() == 1))' from 'void' to 'bool'
   if (blynkWriteManual(0, param.asInt() == HIGH)); {
                                                ^
SmartFarm1:92:3: error: 'else' without a previous 'if'
   else {
   ^
C:\Users\acer\Desktop\SmartFarm1\SmartFarm1.ino: In function 'void BlynkWidgetWrite12(BlynkReq&, const BlynkParam&)':
SmartFarm1:98:48: error: could not convert 'blynkWriteManual(2, ((& param)->BlynkParam::asInt() == 1))' from 'void' to 'bool'
   if (blynkWriteManual(2, param.asInt() == HIGH)); {
                                                ^
SmartFarm1:102:3: error: 'else' without a previous 'if'
   else {
   ^
Multiple libraries were found for "Adafruit_Sensor.h"
 Used: C:\Users\acer\Documents\Arduino\libraries\Adafruit_Unified_Sensor
 Not used: C:\Users\acer\Documents\Arduino\libraries\arduino_177969
Using library ESP8266WiFi at version 1.0 in folder: C:\Users\acer\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.4\libraries\ESP8266WiFi 
Using library Blynk at version 0.6.1 in folder: C:\Users\acer\Documents\Arduino\libraries\Blynk 
Using library DHT_sensor_library at version 1.4.1 in folder: C:\Users\acer\Documents\Arduino\libraries\DHT_sensor_library 
Using library Adafruit_Unified_Sensor at version 1.0.3 in folder: C:\Users\acer\Documents\Arduino\libraries\Adafruit_Unified_Sensor 
exit status 1
'MODE' does not name a type

แบบนี้ไหมครับ :relaxed:

ขอลิ้งค์ต้นทางหน่อย

คำสั่งนี้มันไม่น่ามีนะครับ ต้นทางวางยาไว้หรือไม่

อีกประเด็นคือ อธิบายหน่อยว่า เราจะทำอะไร ระบบ เป็นแบบไหน เราไม่จำเป็นต้อง วนอยู่กับ error ที่ไม่จำเป็น ตัดออกแล้วเพิ่มน่าจะเร็วกว่าครับ

ขอบคุณครับ นี้ลิ้งต้นทางครับ
ลิ้งตอนทางครับ

คือ ผมจะทำ Smart Farm เล็กๆส่งครูครับ ตอนนีัมีโค้ดที่ใช้ได้แล้วแต่มันแค่ เปิดปิด วาล์วน้ำ กับดูสถานะความชื้นต่างๆใน Blynk ครับ แต่ผมอยากได้แบบที่ทำงานอัตโนมัติด้วยครับ เลยไปหาใหม่ จะเพิ่มไปในโค้ดเก่าที่ได้แล้วผมก็ทำไม่ค่อยเก่งครับ :joy: :joy:
นี้โค้ดแบบที่ใช้ได้แล้วครับ

// Viral Science www.viralsciencecreativity.com www.youtube.com/c/viralscience
// IOT Smart Plant Monitoring System
#define BLYNK_PRINT Serial
#include <SPI.h>
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <SimpleTimer.h>
#include <DHT.h>
#define BLYNK_PRINT Serial
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS D2
#define pump D5
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

char auth[] = "Yq0KKFoeYYJaS83VtX7qnxAVKkAU9M1f";
char ssid[] = "Galaxy A71950B";
char pass[] = "0850123416";


#define sensorPin D3
int sensorState = 0;
int lastState = 0;
#define DHTPIN 2
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
SimpleTimer timer;
void sendSensor()
{
  float h = dht.readHumidity();
  float t = dht.readTemperature();

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

  Blynk.virtualWrite(V5, h);  //V5 is for Humidity
  Blynk.virtualWrite(V6, t);  //V6 is for Temperature
}
void setup()
{
  Serial.begin(9600);
  Blynk.begin(auth, ssid, pass, "oasiskit.com", 8080);
  pinMode(sensorPin, INPUT);
  dht.begin(); 

  timer.setInterval(1000L, sendSensor);
  Serial.begin(115200);
  Blynk.begin(auth, ssid, pass, "oasiskit.com", 8080);
  sensors.begin();
}
int sensor = 0;
void sendTemps()
{
  sensor = analogRead(A0);
  int moi = map(analogRead(A0), 0, 1024, 100, 0);
  sensors.requestTemperatures();
  //float temp = sensors.getTempCByIndex(0);
  Serial.println(moi);
  Serial.println(sensor);
  Blynk.virtualWrite(V1, moi);
  Blynk.virtualWrite(V2, sensor);
  delay(1000);

  Blynk.virtualWrite(V3, HIGH);

  
}
void loop()
{
  Blynk.run();
  timer.run();
  sendTemps();
  sensorState = digitalRead(sensorPin);
  Serial.println(sensorState);

  if (sensorState == 1 && lastState == 0) {
    Serial.println("needs water, send notification");
    Blynk.notify("Water your plants");
    lastState = 1;
    delay(1000);
    //send notification

  }
  else if (sensorState == 1 && lastState == 1) {
    //do nothing, has not been watered yet
    Serial.println("has not been watered yet");
    delay(1000);
  }
  else {
    //st
    Serial.println("does not need water");
    lastState = 0;
    delay(1000);
  }

  delay(100);
}

1 Like

อัตโนมัติยังไงครับ อธิบายหน่อย

เปิดปั้มน้ำ อัตโนมัติเมื่อความชื้นในดินต่ำครับ
ผมไปอ่านในลิ้งต้นทางแล้ว โค้ดนี้น่าจะผิดมาครับ

ขอบคุณที่ให้คำแนะนำครับ

แล้วตอนนี้ทำอะไรได้แล้วบ้างครับ โค้ตที่เรามี

ตอนนี้ผมได้ละครับ ได้โค้ดมาจากกระทู้นี้ https://eleceasy.com/t/auto-manual-blynk/4193

ถ้ามีปัญหาอื่นอีกเดี๋ยวกลับมาสอบถามอีกครับ :smile: :smile:
ขอบคุณครับ

1 Like