Nội dung code phía trên có một lỗi là khi nó đang vận hành mà mình vọc cái Time Input thì có một số trường hợp nó chạy sai.
Mình đã viết lại đoãn code mới với cách giải kiểu khác. Kết quả đã sửa (fix) được lỗi trên.
Ngày trong tuần nếu được chọn thì sẽ là ngày để mở.
Thời gian cài đặt mở sẽ so sánh với thời gian thực. Thời gian tắt thì tùy, nếu thời gian tắt có giá trị bé hơn thời gian mở thì sẽ là trường hợp mở vào tối hôm nay và tắt vào sáng ngày mai. Tính năng này cũng đã được kiểm tra Ok.
Lỗi cụ thể thế nào thì các bạn xem clip nhe
Phần code thế này, copy & pate thay thế cho cả cái function BLYNK_WRITE(timeInput) và TimeAuto()
copy & pate TimeAuto()
Mã:void TimeAuto() { unsigned int times = hour()*60 + minute(); byte today = weekday(); //the weekday now (Sunday is day 1, Monday is day 2) if (TimeStart == TimeStop) { timeOnOff = false; } else if (TimeStart < TimeStop) if (bitRead(dayStartSelect, today - 1)) if ((TimeStart <= times) && (times < TimeStop)) timeOnOff = true; else timeOnOff = false; else timeOnOff = false; else if (TimeStart > TimeStop) { if ((TimeStop <= times) && (times < TimeStart)) timeOnOff = false; else if ((TimeStart <= times) && bitRead(dayStartSelect, today - 1)) timeOnOff = true; else if ((TimeStop > times) && bitRead(dayStopSelect, today)) timeOnOff = true; } }
copy & pate BLYNK_WRITE(timeInput)
Mã:BLYNK_WRITE(timeInput) { Serial.println("Time Input"); TimeInputParam t(param); //blynk-library/src/WidgetTimeInput.h // Process start time if (t.hasStartTime()) { TimeStart = t.getStartHour()*60 + t.getStartMinute(); } else TimeStart = 0; // Process stop time if (t.hasStopTime()) { TimeStop = t.getStopHour()*60 + t.getStopMinute(); } else TimeStop = 0; // Process Blynk TimeInput weekdays 7. Sun, 1. Mon, 2. Tue, 3. Wed, 4. Thu, 5. Fri, 6. Sat // Process RTC weekday(); 1. Sun, 2. Mon, 3. Tue, 4. Wed, 5. Thu, 6. Fri, 7. Sat // Bit dayStartSelect 0. Sun, 1. Mon, 2. Tue, 3. Wed, 4. Thu, 5. Fri, 6. Sat // Bit dayStopSelect = dayStartSelec + 1 0. None, 1. Sun, 2. Mon, 3. Tue, 4. Wed, 5. Thu, 6. Fri, 7. Sat dayStartSelect = 0; dayStopSelect = 0; for (int i = 1; i <= 7; i++) if (t.isWeekdaySelected(i)) if (i == 7) { bitWrite(dayStartSelect, 0, 1); bitWrite(dayStopSelect, 1, 1); } else { bitWrite(dayStartSelect, i, 1); bitWrite(dayStopSelect, i+1, 1); } }