ขอสอบถามหน่อยคะ แอพblynk ตั้งเวลาเปิดไฟเวลา18.00-06.00 แต่พอถึงเวลา00.00 ไฟดับแล้วไม่ติดอีกเลยต้องแก้ยังไงคะ
Time input ค่ะ
ต้องดูจากโค้ตที่ใช้ครับ ถึงจะบอกได้
#define BLYNK_PRINT Serial
#include <SPI.h>
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <SimpleTimer.h>
#include <TimeLib.h>
#include <WidgetRTC.h>
//-------------------------------------------------------------------
char Date[16];
char Time[16];
long startsecondswd; // weekday start time in seconds
long stopsecondswd; // weekday stop time in seconds
long nowseconds; // time now in seconds
#define LED 16
char auth[] = "--------------------------";
boolean oldState;
char ssid[] = "AndroidAP";
char pass[] = "0875464362";
BlynkTimer timer;
//---------------------------------------------
//--------------------------------------------------------------------------
BLYNK_CONNECTED()
{
Blynk.syncAll();
}
WidgetTerminal terminal(V3);
WidgetLED Led(V4);
WidgetRTC rtc;
//--------------------------------------------
void activetoday(){ // check if schedule should run today
if(year() != 1970){
Blynk.syncVirtual(V1);
}
}
BLYNK_WRITE(V1) {
sprintf(Date, "%02d/%02d/%04d", day(), month(), year());
sprintf(Time, "%02d:%02d:%02d", hour(), minute(), second());
//Blynk.virtualWrite(V13, Time);
TimeInputParam t(param);
terminal.print("Checked schedule at: ");
terminal.println(Time);
int dayadjustment = -1;
if(weekday() == 1){
dayadjustment = 6; // needed for Sunday, Time library is day 1 and Blynk is day 7
}
if(t.isWeekdaySelected((weekday() + dayadjustment))){ //Time library starts week on Sunday, Blynk on Monday
terminal.println("Schedule ACTIVE today");
if (t.hasStartTime()) // Process start time
{
terminal.println(String("Start: ") + t.getStartHour() + ":" + t.getStartMinute());
}
if (t.hasStopTime()) // Process stop time
{
terminal.println(String("Stop : ") + t.getStopHour() + ":" + t.getStopMinute());
}
terminal.println(String("Time zone: ") + t.getTZ()); // Timezone is already added to start/stop time
for (int i = 1; i <= 7; i++) { // Process weekdays (1. Mon, 2. Tue, 3. Wed, ...)
if (t.isWeekdaySelected(i)) {
terminal.println(String("Day ") + i + " is selected");
}
}
nowseconds = ((hour() * 3600) + (minute() * 60) + second());
startsecondswd = (t.getStartHour() * 3600) + (t.getStartMinute() * 60);
if(nowseconds >= startsecondswd){
terminal.print("LED STARTED");
terminal.println(String(" ") + t.getStartHour() + ":" + t.getStartMinute());
if(nowseconds <= startsecondswd + 30){ // 90s on 60s timer ensures 1 trigger command is sent
digitalWrite(LED, LOW);;// code here to switch the relay ON
Led.on();
}
}
else{
digitalWrite(LED, HIGH); // code here to switch the relay OFF
Led.off();
terminal.println("LED NOT STARTED today");
}
stopsecondswd = (t.getStopHour() * 3600) + (t.getStopMinute() * 60);
if(nowseconds >= stopsecondswd){
terminal.print("LED STOPPED at");
terminal.println(String(" ") + t.getStopHour() + ":" + t.getStopMinute());
if(nowseconds <= stopsecondswd + 30){ // 90s on 60s timer ensures 1 trigger command is sent
digitalWrite(LED, HIGH); // code here to switch the relay OFF
Led.off();
}
}
else{
if(nowseconds >= startsecondswd){ // only show if motor has already started today
digitalWrite(LED, LOW); // code here to switch the relay OFF
Led.on();
terminal.println("LED is still RUNNING");
}
}
}
else{
terminal.println("Schedule INACTIVE today");
}
terminal.println();
}
void reconnectBlynk() {
if (!Blynk.connected()) {
if(Blynk.connect()) {
BLYNK_LOG("Reconnected");
} else {
BLYNK_LOG("Not reconnected");
}
}
}
void setup() {
Serial.begin(115200); // See the connection status in Serial Monitor
Blynk.begin(auth, ssid, pass, "blynk.iot-cm.com", 8080);
rtc.begin();
pinMode(LED,OUTPUT); //26
digitalWrite(LED,HIGH);
Led.off();
int mytimeout = millis() / 1000;
while (Blynk.connect() == false) { // try to connect to server for 10 seconds
if((millis() / 1000) > mytimeout + 8){ // try local server if not connected within 9 seconds
break;
}
}
timer.setInterval(10000L, reconnectBlynk); // check every 30s if still connected to server
timer.setInterval(20000L, activetoday); // check every minute if schedule should run today
}
void loop()
{
if (Blynk.connected()) {
Blynk.run();
}
timer.run();
}
//active low นะคะ
ลองแทนค่าเวลาลงไปในตัวแปรเหล่านี้ แล้วน้องจะเข้าใจครับว่าทำไมมันถึงดับก่อน แล้วจะแก้ไขมันได้อย่างไร
ตัวแปรที่ต้องแทนค่า
nowseconds
คือ เวลาปัจจุบัน
startsecondswd
คือ เวลาที่เริ่ม(ที่เราตั้งให้เปิด)
stopsecondswd
คือ เวลาจบ(ที่เราตั้งให้ปิด)
//// loop Start time
nowseconds = ((hour() * 3600) + (minute() * 60) + second());
startsecondswd = (t.getStartHour() * 3600) + (t.getStartMinute() * 60);
if(nowseconds >= startsecondswd){
if(nowseconds <= startsecondswd + 30){ // 90s on 60s timer ensures 1 trigger command is sent
digitalWrite(LED, LOW);;// code here to switch the relay ON
Led.on();
}
}
else{
digitalWrite(LED, HIGH); // code here to switch the relay OFF
Led.off();
}
//// loop End time
stopsecondswd = (t.getStopHour() * 3600) + (t.getStopMinute() * 60);
if(nowseconds >= stopsecondswd){
if(nowseconds <= stopsecondswd + 30){ // 90s on 60s timer ensures 1 trigger command is sent
digitalWrite(LED, HIGH); // code here to switch the relay OFF
Led.off();
}
}
else{
if(nowseconds >= startsecondswd){ // only show if motor has already started today
digitalWrite(LED, LOW); // code here to switch the relay OFF
Led.on();
terminal.println("LED is still RUNNING");
}
}
else{
terminal.println("Schedule INACTIVE today");
}
ลองแทนแล้วแต่ก็ยัง งงๆอยู่ค่ะ รบกวนแก้ให้เลยได้มั้ยคะ
ถ้าต้องการใช้งาน time input น้องต้องเข้าใจ เคสนี้ให้ได้ครับ ไม่งั้นย้ายไปใช้ timer ดีกว่าไม่ต้องใช้โค้ตอะไร จริงๆ ก็อยากแทนให้เลยครับ แต่น้องจะไม่ได้อะไรเลยถ้าให้ผมคิดให้ ผมใบ้ให้สุดๆ แล้ว
ลองแทนดูหัดอ่าน แทนค่าแล้วไม่เข้าใจก็ถามได้เลยผมยินดีตอบตลอดครับ
สมมติ เวลา 00:00 = 0x60 = 0
และ 24:00 = 24x60 = 3600
เอาเวลาที่น้องตั้งมาคิด แล้วแทนค่า ดู อ่านตามตัวดำเนินการ ถ้าเป็นจริง มันเข้าไปทำงานคำสั่งไหน