Гроубокс помощь с скетчем
- Войдите на сайт для отправки комментариев
Вс, 19/12/2021 - 14:14
Привет форумчане.
Помогите в правке кода.
Вроде работает,но как-то криво.Не могу настроить включение реле по времени.
#include <stDHT.h>
#include <iarduino_RTC.h>
#include <LiquidCrystal_PCF8574.h>
#include <TimeLib.h>
#include <DS1307RTC.h>
#include <Wire.h>
iarduino_RTC time(RTC_DS1307);
int in2 = 6;
int in1 = 8;
LiquidCrystal_PCF8574 lcd(0x27);
DHT sens(DHT22);
unsigned long timing;
void setup(){
pinMode(in2, OUTPUT); //реле освещения
pinMode(in1, OUTPUT); //реле вентилятора
tmElements_t tm;
time.begin();
lcd.begin(16, 2);// у нас экран 16 столбцов на 2 строки
lcd.setBacklight(255); //установить яркость подсветки на максимум
}
void loop(){
int t2 = sens.readTemperature(2);
int h2 = sens.readHumidity(2);
tmElements_t tm;
if (RTC.read(tm))
if (tm.Minute==59)
{digitalWrite(in1, LOW);}
if (tm.Second==40)
{digitalWrite(in1, HIGH);}
if (t2 > 26) {digitalWrite(in1, LOW);
lcd.setCursor(0,1);
lcd.print("Fan is ON ");
lcd.print(char(126));
lcd.print(t2);
lcd.print(char(223));
lcd.print(" ");
lcd.print(" ");
}
else{
lcd.setCursor(0,1);
lcd.print("Temperature: ");
lcd.print(t2);
lcd.print(char(223));
}
lcd.setCursor(0,0);
lcd.print("Humidity: ");
lcd.print(h2);
lcd.print("%");
if (millis() - timing > 7000){
digitalWrite(in2, LOW);
lcd.setCursor(0,0);
lcd.print("Humidity: ");
lcd.print(h2);
lcd.print("%");
lcd.print(" ");
lcd.print(char(111));
lcd.print(char(78));
}
if (millis() - timing > 35000){
timing = millis(); digitalWrite(in2, HIGH);
lcd.setCursor(0,0);
lcd.print("Humidity: ");
lcd.print(h2);
lcd.print("%");
lcd.print(" ");
lcd.print(char(111));
lcd.print(char(70));
}
}
И что именно не получается? Словами описать можешь?
Вроде работает,но как-то криво.Не могу настроить включение реле по времени.
все силы на работу с LCD ушли?
Если серьезно - когда отлаживаете код, оставьте в нем только самое необходимое, например работу с реле, а всю лабуду типа экранчиков и когечек - нах.
Когда отладите реле - тогда постепенно начинайте добавлять все остальное
Как видишь по коду,то реле на освещение работает по тайменгу.Хотя уменя стоит модуль 1307.Не получается включать челе по времени.Допустим в 9-00 вкл. а в 21-00 выкл.В итоге сделал так.
Так и делал.Не получается привязать релейки к времени.Вроде как на вентилятор работает,а на освещение не вкакую.Пришлось по таймингу делать
Еще вопрос по коду
if(t2 > 26) {digitalWrite(in1, LOW);42lcd.setCursor(0,1);43lcd.print("Fan is ON ");44lcd.print(char(126));45lcd.print(t2);46lcd.print(char(223));47lcd.print(" ");48lcd.print(" ");49}50else{51lcd.setCursor(0,1);52lcd.print("Temperature: ");53lcd.print(t2);54lcd.print(char(223));Включение вентилятора на >26С.
Автоматом он выключается чере 15-20 секунд.
Если после else добавить код на выключение,допустим на 24С или просто код
digitalWrite(in1, HIGH);то происходит конфликт с кодом на включение вентилятора раз в час на 20 секунд.if(tm.Minute==59)37{digitalWrite(in1, LOW);}38if(tm.Second==40)39{digitalWrite(in1, HIGH);}В итоге реле не работает
я так понимаю нужно капать в сторону кода на ds1307 но не пойму что ему не хватает
Не получается сделать по времени? А как пробовал? И пробовал ли?
if (tm.Hour>=9) {digitalWrite(in2, HIGH);} //Если время 9-00, то включаем лампу посредством реле
if (tm.Hour>=21) {digitalWrite(in2, LOW);} //Если время 21-00, то выключаем лампу посредством реле
По идее должен был сработать.
И че не так?
Я не пойму, кому это надо - тебе или нам? Что из тебя все клещами тянуть надо?
Было бы "так",то весь этот бутер работал бы,и не обращался б за помощью.Вроде как все выше было сказано что не так.
Сегодня уже отвечали в другой теме. Используй unix time.
parfizanXXXXXX - научитесь нормально формулировать свои вопросы и описывать проблемы.
Кстати, этот навык очень связан с умением программировать. Именно потому, что вы не в силах и два слова связать - у вас и компьютеру не удается обьяснить, что и как должно работать.