Phatthawat
(Phatthawat Chanthasen)
1
คือตอนนี้ติดปัญหาอยู่ที่ว่า
(1 คือ sensor ไม่ตรวจจับ 0 คือ sensor ตรวจเจอ)
ผมใช้คำสั่ง if(sensor == 1){servo.write(0);} สั่งให้ servo หมุนไปที่0 องศาและผมอยากใช้ blynk เปิดได้ด้วยพอผมกดในแอพblynk ให้ servo หมุนไปที่ 90 องศา มันก็หมุนไปแล้วหมุนกลับครับ ติดที่ตรงนี้ที่เดียวที่ผมยังคิดการทำงานไม่ออกว่าควรเขียนลักษณะแบบไหน รบกวนช่วยผมด้วยนะครับ
#define BLYNK_PRINT Serial
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <Servo.h>
/**************** WiFi settings **********************/
char auth[] = "";
char ssid[] = "Electronics_2.4GHz";
char pass[] = "6132111EN";
BlynkTimer timer;
#define E18_sensor D1
unsigned long previousMillis = 0;
const long interval = 1000;
WidgetLED led_open (V1);
WidgetLED led_close(V2);
WidgetLED led_process (V3);
/***************************************/
Servo myServo;
void setup() {
Serial.begin(9600);
myServo.attach(4);
pinMode(E18_sensor, INPUT);
Blynk.begin(auth, ssid, pass,);
//timer.setInterval(500L, servo_process);
timer.setInterval(1050L, WiFi_signal);
led_open.off();
led_close.off();
}
void loop() {
Blynk.run();
timer.run();
servo_process();
}
void servo_process(){
/*if(currentMillis - previousMillis >= interval){
previousMillis = currentMillis;*/
int E18_sensor_value=digitalRead(E18_sensor);
if(E18_sensor_value == 0){
myServo.write(180);
delay(2000);
myServo.write(0);
}
}
BLYNK_WRITE(V10){
if(param.asInt() == 1){
myServo.write(0);
led_open.on();
led_close.off();
Serial.print("Blynk_state : 100 ");
}
}
BLYNK_WRITE(V11){
if(param.asInt() == 1){
myServo.write(150);
led_open.off();
led_close.on();
Serial.print("Blynk_state : 0");
}
}
void WiFi_signal(){
long dbsignal;
dbsignal = WiFi.RSSI();
Blynk.virtualWrite(V20,dbsignal);
}
Remy_Martin
(Permpol Thanapunnamas)
3
เบื่องต้นลองจัด form V10 กับ V11 ใหม่ก่อนครับ เปลี่ยน push เป็น sw ด้วย
Phatthawat
(Phatthawat Chanthasen)
4
ในแอพ Blynk ตอนนี้ปรับเป็น Push ครับ สามารถใช้ได้ปกติ แต่เมื่อ Sensor เข้าสู่ลูป if(sensor == 1){servo.write(0) มันจะทำให้ในแอพสั่งเปิดไม่ได้ครับ ผมเลยอยากหาแนวทางตรงนี้ครับ ขอบคุณครับ
Remy_Martin
(Permpol Thanapunnamas)
5
โค้ตบรรทัดนี้อยู่ตรงไหนครับ ทำไมโปรแกรมที่ให้มาผมหาเงื่อนไขนี้ไม่เจอ
Phatthawat
(Phatthawat Chanthasen)
6
อ้อ ตรงนี้ผมไม่ได้ใส่ไว้ครับ ผมทดสอบโค้ดแล้วเอาออกเลยเพราะมันวนลูปอยู่คำสั่งนั้นครับ แต่ที่อยากจะทำคือให้มันอ่านค่าครั้งเดียว จากนั้นทำแล้วเคลียร์ค่า และรอรับคำสั่งใหม่อีกรอบ ประมาณนี้ครับ
Remy_Martin
(Permpol Thanapunnamas)
7
แล้วที่เอาออกนี้ ใช้ Vpin อะไรครับ
PUYIOT
(อิทธิรงค์ ทองย้อย (ปุ๋ย))
8
code นี้เป็นตัวอย่างให้รัน LINE notify เพียงครั้งเดียวน่าจะคล้ายๆกันครับ
#include <TridentTD_LineNotify.h>
#include <Bounce2.h>
//------------------------------------------------------------------------------------------------
#define LINE_TOKEN "QerWyEZdBShylI3iTTxxxxxxxxxxxxxvLy2NQa7AXFgYLM"
#define BUTTON_1 D1
Bounce debouncer1 = Bounce();
//กำหนดสถานะให้กับปุ่มต่างๆ เพื่อให้สามารถแยกระหว่างการติดหรือดับของ PB
int Btn1 = 0;
//*****************************************************************************************************
//******************************* void setup *********************************************
//*****************************************************************************************************
void setup() {
//****************************************************************************************************
pinMode(BUTTON_1, INPUT_PULLUP);
debouncer1.attach(BUTTON_1); debouncer1.interval(5);
//***************************************************************************************************
LINE.setToken(LINE_TOKEN);
//*****************************************************************************************************
//******************************* จบ void setup *********************************************
//*****************************************************************************************************
//*****************************************************************************************************
//******************************* void loop *************************************************
void loop() {
debouncer1.update();
int value1 = debouncer1.read();
if ( value1 == 0 ) {
ledCB_1.on();
delay(10);
Btn1 = 0;
}
else if (value1 == 1 && Btn1 == 0) {
ledCB_1.off();
delay(10);
LINE.notify("xxxxxxx");
Btn1 = 1;
}
else if (value1 == 1 && Btn1 == 1) {
ledCB_1.off();
delay(10);
}
delay(100 );
}
//******************************* จบ void loop *************************************************
//*****************************************************************************************************
เดิม Btn1 = 0; ถ้า if ( value1 == 0 ) Btn1 ยังคง = 0; อยู่
แต่ถ้า (value1 == 1 และ Btn1 == 0 ก็ให้ส่ง Line ออกไป และให้ Btn1 = 1;
มันก็ไปเข้าเงื่อนไข value1 == 1 && Btn1 == 1 ดังนั้นมันจะไม่ไปทำงานที่เงื่อนไข value1 == 1 && Btn1 == 0 อีกครับ และมันจะรอให้เกิดเงื่อนไข value1 == 0 อีกครั้ง เพื่อให้ Btn1 == 0 และถ้า value1 == 1 และ Btn1 == 0 อีก มันก็จะส่งLine Notify ไปอีก 1 ครั้ง ประมาณนี้ครับ
ขออภัยถ้าตอบไม่ตรงคำถาม