การกำหนดโหมด auto และ manual โดยใช้ selector switch

ผมอยากที่จะใส่คำสั่ง ให้เป็นโหมด auto และ manual โดยใช้ selector switch ในการสลับโหมดการทำงานครับ รบกวนสอนโค้ดและวิธีต่อ selector switch หน่อยครับขอบคุณครับ

#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3f, 16, 2);
#include "DHT.h"
#define DHTPIN D3     
#define DHTTYPE DHT22   
DHT dht(DHTPIN, DHTTYPE);
#define BLYNK_PRINT Serial
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include "DHT.h"
char auth[] = "PUTkSe3EHBE4Lm-P5ezDS9Oy-bzJ7atX";
char ssid[] = "realme";
char pass[] = "0992246165";
BlynkTimer timer;
int Rlay_1  = D5;
int Rlay_2  = D6;
int Rlay_3  = D7;
int reading = 0;
int setTime = 50;
int start = 0;
int stop =0;
int loop_delay = 0;
int delay_time_loop = 5000;
unsigned long previousTime = 0 ;
unsigned long stop_Time =0;
int Auto = D9;
int Manual = D10;
int SW_Manual_ON = D4;
int SW_Manual_OFF = D8;

int Auto_value = 0;
int Manual_value = 0;
int SW_Manual_ON_value = 0;
int SW_Manual_OFF_value = 0;

void setup() {
  
Serial.begin(9600);
Serial.println("DHTxx test!");
dht.begin();
  lcd.begin();
  lcd.backlight();
  Serial.begin(9600);
  dht.begin();
Blynk.begin(auth, ssid, pass);
  pinMode(Rlay_1, OUTPUT);
  pinMode(Rlay_2, OUTPUT);
  pinMode(Rlay_3, OUTPUT);
 Serial.begin(9600);
}

void loop() {
  float h = dht.readHumidity();
  float t = dht.readTemperature();
  float f = dht.readTemperature(true);

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

  float hif = dht.computeHeatIndex (f, h) ;
  float hic = dht.computeHeatIndex (t, h, false) ;
  
  lcd.home () ;
  lcd.print("Temp.    : ") ;
  lcd.print (t) ;
  lcd.setCursor (0, 1) ;
  lcd.print ("Humidity : ") ;
  lcd.print (h) ;
  lcd.print ("%") ;
  float HUMI = dht.readHumidity () ;
  float TEMP = dht.readTemperature () ;
    
  Blynk.virtualWrite (V0, TEMP) ;
  Blynk.virtualWrite (V1, HUMI) ;
  
  Blynk.run();
  timer.run();
  Auto_value = digitalRead (Auto);
  Manual_value = digitalRead (Manual);
  SW_Manual_ON_value = digitalRead (SW_Manual_ON);
  SW_Manual_OFF_value =  digitalRead (SW_Manual_OFF);
        ////////////////////// Auto //////////////////////////
   if (Auto_value == 0 ){
   if(!stop)
   {     
  unsigned long showTime = millis();
  
  if ((TEMP >= 35) && (TEMP<=37.99) && start == 0)   //กำหนดอุณหภูมิตอนทำงาน
  { 
   previousTime = showTime;
    digitalWrite (Rlay_1, HIGH);
    digitalWrite (Rlay_2, HIGH);
    digitalWrite (Rlay_3, LOW);
    loop_delay = 0;
    start = 1;
  }
  if (start == 1 && millis() - previousTime >= 1800000L)
  {
    stop_Time = millis();
    digitalWrite (Rlay_1, LOW);
    digitalWrite (Rlay_2, LOW);
    digitalWrite (Rlay_3, LOW);
    start = 0;
    stop = 1;
    }
   
  if (stop == 1 && millis() - stop_Time>=1800000L)
  {
    start =0;
    stop =0;
    }
     if ((TEMP >= 38)&&start == 0) //กำหนดอุณหภูมิตอนทำงาน
  { 
   previousTime = showTime;
    digitalWrite (Rlay_1, HIGH);
    digitalWrite (Rlay_2, HIGH);
    digitalWrite (Rlay_3, HIGH);
    loop_delay = 0;
    start = 1;
  }
  if (start == 1 && millis() - previousTime >= 1800000L)
  {
    stop_Time = millis();
    digitalWrite (Rlay_1, LOW);
    digitalWrite (Rlay_2, LOW);
    digitalWrite (Rlay_3, LOW);
    start = 0;
    stop = 1;
    }
   
  if (stop == 1 && millis() - stop_Time>=1800000L)
  {
    start =0;
    stop =0;
    }
}}
////////////////////// Manual //////////////////////////
if (Manual_value == 0 ) {
    if (SW_Manual_ON_value == 1) {
      digitalWrite (Rlay_1, HIGH);
      digitalWrite (Rlay_2, HIGH);
      digitalWrite (Rlay_3, HIGH);
    } else if (SW_Manual_OFF_value == 0) {
      digitalWrite (Rlay_1, LOW);
      digitalWrite (Rlay_2, LOW);
      digitalWrite (Rlay_3, LOW);
    }

  } }

รอตัวอย่างการใช้งานนะครับ กำลังทำคลิป

อันนี้หมายถึง Hardware รึป่ะครับ ไม่ใช่ Widget ใน Blynk :sweat_smile:

Selector Switch

ครับพี่…

โถ่วววว เอ้ย แล้วก็ไม่บอกนะครับ กำลังจะหาคำตอบมาหาดูเอะมันไม่มีใน widget นี้ นะ

เท่าที่ดูตอนนี้เรามีโค้ต รองรับระบบ M และ A แล้วใช่ป่ะ

มันยังทำงานไม่ได้เต็มระบบอะครับ ยังไม่ร้อยเปอรืเซนต์

ขอตอบเฉพาะที่ถามก่อนละกันครับ การจะเอา SW เข้ามาใช้งานก็ใช้การ ต่อแบบ SW ทั่วไปนั้นแหละเพียงแต่ว่ากรณีถ้าเรา ใช้ ไฟ 220Vac ที่ SW เราจะเอา มาเข้า บอร์ดตรงๆ ไม่ได้ เราต้องเอา ไฟ 220Vac มา On Off Relay ก่อนไม่เกี่ยวกับไฟ DC ที่ใช้ในบอร์ด

จากนั้น เอาไฟเลี้ยง 3V จากบอร์ด ต่อแบบ Pull up หรือ Down เพื่อนำไปผ่าน Relay อีกที เพื่อจับสถานะ ว่าเป็น 0 หรือ 1 เมื่อได้แล้วเราก็เอาไปอ่านพินนั้นเป็น digitalRead(); เพื่ออ่านค่า นำค่าที่ได้ไปใช้ต่อไปครับ