Гроубокс помощь с скетчем
- Войдите на сайт для отправки комментариев
Вс, 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);
42
lcd.setCursor(0,1);
43
lcd.print(
"Fan is ON "
);
44
lcd.print(
char
(126));
45
lcd.print(t2);
46
lcd.print(
char
(223));
47
lcd.print(
" "
);
48
lcd.print(
" "
);
49
}
50
else
{
51
lcd.setCursor(0,1);
52
lcd.print(
"Temperature: "
);
53
lcd.print(t2);
54
lcd.print(
char
(223));
Включение вентилятора на >26С.
Автоматом он выключается чере 15-20 секунд.
Если после else добавить код на выключение,допустим на 24С или просто код
digitalWrite(in1, HIGH);
то происходит конфликт с кодом на включение вентилятора раз в час на 20 секунд.if
(tm.Minute==59)
37
{digitalWrite(in1, LOW);}
38
if
(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 - научитесь нормально формулировать свои вопросы и описывать проблемы.
Кстати, этот навык очень связан с умением программировать. Именно потому, что вы не в силах и два слова связать - у вас и компьютеру не удается обьяснить, что и как должно работать.