รบกวนขอแนวการทำ auto/manual หน่อยครับ

คือผมอยากทำ auto / manual ควบคุมผ่านแอพ blynk
โดยผมจะใช้ Widget timer1ตัว Button 2ตัว ตัวนึงเลือก auto ตัวนึงเลือก manual

การทำงานคือ

กดปุ่ม manual รีเลย์ทำงานทันที
กดปุ่ม auto ตั้งเวลาทำงานด้วย timer เมื่อถึงเวลาที่ตั้งไว้รีเลย์ถึงจะทำงาน

ผมรบกวนขอ Code ตัวอย่างการเขียนทีครับ

/**
 คือผมอยากทำ auto / manual ควบคุมผ่านแอพ blynk
โดยผมจะใช้ Widget timer1ตัว Button 2ตัว ตัวนึงเลือก auto ตัวนึงเลือก manual

การทำงานคือ

กดปุ่ม manual รีเลย์ทำงานทันที
กดปุ่ม auto ตั้งเวลาทำงานด้วย timer เมื่อถึงเวลาที่ตั้งไว้รีเลย์ถึงจะทำงาน

ผมรบกวนขอ Code ตัวอย่างการเขียนทีครับ 
 */
#define BLYNK_PRINT Serial

#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>


char auth[] = "ใส่ Blynk Token";
char server1[] = "oasiskit.com";

char ssid[] = "ใส่ชื่อ WiFi";
char pass[] = "ใส่รหัสผ่าน WiFi";

int Auto_mode;
int Man_mode;
int Timer1;




#define relay1 25
#define relay2 26



BLYNK_WRITE(V1)//กดปุ่ม on off Auto mode
{

  int pinValue = param.asInt();
  if (pinValue == 1) {
    Auto_mode = 1;
    Auto_ON();

  }
  if (pinValue == 0) {
    Auto_mode = 0;
  }
}

void Auto_ON() {

  Man_mode = 0;
  Blynk.virtualWrite(V2, 0);

}



BLYNK_WRITE(V2)//กดปุ่ม on off Manual mode
{

  int pinValue = param.asInt();
  if (pinValue == 1) {
    Man_mode = 1;
    Man_ON();

  }
  if (pinValue == 0) {
    Man_mode = 0;

  }
}

void Man_ON() {
  Auto_mode = 0;
  Blynk.virtualWrite(V1, 0);
}


BLYNK_WRITE(V3)//ตั้งเวลาปิดเปิด Relay ด้วย Timer
{

  int pinValue = param.asInt();
  if (pinValue == 1) {
    Timer1 = 1;//Timer ON


  }
  if (pinValue == 0) {
    Timer1 = 0;//Timer OFF
  }
}








void setup()
{

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

  Serial.begin(115200);

  Blynk.begin(auth, ssid, pass, server1, 8080);
}







void loop()
{

  if (Man_mode == 1 and Auto_mode == 0) {

    digitalWrite(relay1 , 1);
    digitalWrite(relay2 , 1);
  }

  if (Man_mode == 0 and Auto_mode == 0) {

    digitalWrite(relay1 , 0);
    digitalWrite(relay2 , 0);
  }


  if (Man_mode == 0 and Auto_mode == 1 and Timer1 == 1 ) {

    digitalWrite(relay1 , 1);
    digitalWrite(relay2 , 1);
  }

  if (Man_mode == 0 and Auto_mode == 1 and Timer1 == 0 ) {

    digitalWrite(relay1 , 0);
    digitalWrite(relay2 , 0);
  }


  Blynk.run();
}

ลองประยุกต์ดูครับ ผมใช้ ESP32 Blynk server ของ eleceasy.com

ผม clone Project ให้แล้วครับ

ผมเข้าใจว่า @Phichitpon คงต้องการดูว่าเค้าเขียนในลักษณะไหน แล้วจะเอาไปทำความเข้าใจ
และต่อยอดได้ ส่วนเงื่อนไข ผมดูตามข้อมูลที่ให้มานะครับ ออกแนวประมาณนี้

1 Like

ขอบคุณครับมากๆครับ ผมจะลองนำไปประยุกต์ใช้กับ esp8266 ดูครับ ผลเป็นยังไงจะอัพเดทอีกทีครับ