เขียนการควบคุม servo ผ่าน blynk พร้อม line notify ค่ะ เเต่ว่ากด 1 ครั้ง servo ทำงาน 1 รอบ เเต่มันเเจ้งเตือน 2 ครั้งค่ะ

#include <ESP8266WiFi.h>
#define BLYNK_PRINT Serial   
#include <BlynkSimpleEsp8266.h>
#include <Servo.h>
#include <TridentTD_LineNotify.h>
#define LINE_TOKEN  "daX6cquJoPYOua7AiSIqrKygw2Vi3T9FdmVRVGr8uMC"

Servo servo;
char auth[] = "fZzqDH0ZSSCNSDIITNmW5JcGf4EkXorB";
char SSID[] = "Mapraw";
char PASSWORD[] = "mapraw2543";

int servobegin = 0;
int servoend = 90;
int servotime = 1000;

BLYNK_WRITE(V0)
{
  servo.write(servoend);
  delay(servotime);
  servo.write(servobegin);
  //LINE.notify("ให้อาหารปลาเรียบร้อย");
  Serial.println("notify_servo");
}

void setup(){
  Serial.begin(9600);
  servo.attach(2);
  servo.write(servobegin);
  Blynk.begin(auth, SSID, PASSWORD,"blynk.iot-cm.com", 8080);
  LINE.setToken(LINE_TOKEN);
  Serial.println(LINE.getVersion());
  servoangle = servo.read();
  Serial.println(servoangle);
}

void loop(){
  Blynk.run();
  delay(1);
}

แล้วก็แคปการตั้งค่าปุ่มที่กดสั่ง servo มาดูด้วยครับ

ตรงนี้นะหรอที่แจ้งเตือน

ค่ะ ที่ใส่ // ไว้เพราะว่ายังไม่อยากให้รบกวนในไลน์ค่ะ เวลาเทสดูจาก Serial.println เอาค่ะ มันเเจ้ง 2 ครั้งต่อการกด 1 ครั้งค่ะ เเต่servo ทำงานปกตินะคะ

Servo มันวิ่งไปที่ของมันนะถูกแล้วถึงแม้ว่าจะมีการวิ่งมาทำงานครั้งที่ 2 ก็ตามที แต่กับการแจ้งเตือนมันไม่ใช่มันจะทำงานทุกครั้งที่โปรแกรมรันผ่านมา เนื่องจากเราตั้ง ปุ่มเป็น PUSH ซึ่งการกดหนึ่งครั้งอาจทำให้โปรแกรมวิ่งไปมากกว่า 1 ครั้ง ในกรณีนี้ คือ 2 ครั้ง ก่อนที่เราจักดปล่อยมือ

ดั้งนั้นการแก้เคสนี้คือการใส่ delay(300); เพื่อหน่วงเวลารอจังหว่ะเราปล่อยมือนั้นเองลองดูครับ แจ้งผลด้วย

ขอโทษนะคะ ไม่ทราบว่าใส่ไว้ตรงไหนคะ :pleading_face:

#include <ESP8266WiFi.h>
#define BLYNK_PRINT Serial   
#include <BlynkSimpleEsp8266.h>
#include <Servo.h>
#include <TridentTD_LineNotify.h>
#define LINE_TOKEN  "daX6cquJoPYOua7AiSIqrKygw2Vi3T9FdmVRVGr8uMC"

Servo servo;
char auth[] = "fZzqDH0ZSSCNSDIITNmW5JcGf4EkXorB";
char SSID[] = "Mapraw";
char PASSWORD[] = "mapraw2543";

int servobegin = 0;
int servoend = 90;
int servotime = 1000;

BLYNK_WRITE(V0)
{
  servo.write(servoend);
  delay(servotime);
  servo.write(servobegin);
  //LINE.notify("ให้อาหารปลาเรียบร้อย");
  delay(300);
  Serial.println("notify_servo");
}

void setup(){
  Serial.begin(9600);
  servo.attach(2);
  servo.write(servobegin);
  Blynk.begin(auth, SSID, PASSWORD,"blynk.iot-cm.com", 8080);
  LINE.setToken(LINE_TOKEN);
  Serial.println(LINE.getVersion());
  servoangle = servo.read();
  Serial.println(servoangle);
}

void loop(){
  Blynk.run();
  delay(1);
}

กลายเป็นว่า เรากด 1 ครั้ง เเล้ว servo ทำงาน 2 รอบ เลย notify มา 2 รอบค่ะ

มันขึ้นอยู่กับว่าเรากดทิ้งไว้นานแค่ไหนครับ

เเต่เราค้างไม่นานนะคะ

ก็เหมือนกันครับ ลองกดค้างสิครับ ส่งค่าไม่หยุดแน่ๆ

วิธีการเขียนรับค่า ด้วย PUSH BUTTON ให้ศึกษาจากกระทู้นี้ครับ

และอ่านอันนี้ด้วยผมอธิบายไว้ละเอียดตอนท้ายๆ