Всем привет Изучаю датчик времени, хочу сделать полив растений по времени. Чтобы каждый день полив происходил в 13ч. Включение помпы происходит через реле Вопрос в том, что сейчас реле постоянно включено, хотя вроде время выставлено, реле заданно До этого я сами часы настроил, время определяется верно, в часах оно сохранено, поэтому тут не стал снова задавать определение текущего времени Сам скетч: #include <Wire.h> #include "RTClib.h" //Реле #define Relay 3 RTC_DS1307 rtc; void setup () { //Реле pinMode(Relay, OUTPUT); //Часы Wire.begin(); rtc.begin(); //Serial.begin(9600); //rtc.adjust(DateTime(2014, 8, 2, 6, 48, 0)); } void loop () { //Цикл полива по времени DateTime now = rtc.now(); if (now.hour() >= 13 && now.hour() < 14) { digitalWrite(Relay, 1); delay(5000); } else digitalWrite(Relay, 0); }
Это означает, что для включения реле надо писать digitalWrite(pin, LOW), а не digitalWrite(pin, HIGH), если реле включается по низкому уровню. Попробовать легко - достаточно поменять местами нолик и единичку в вашем скетче, когда пишете в пин реле.
Реле сработало, но есть такой вопрос - как мне задать время, например 21.20.20 (час, минута, секунда) Такая команда не помогает: (Мне кажется, я перемудрил с условием). Может есть возможность так написать 21:20:20 ? void loop () { //Цикл полива по времени DateTime now = rtc.now(); //Выставляем нужное время полива if (now.hour() >= 21 && now.minute() >= 20 && now.second() >= 00 && now.hour() < 21 && now.minute() < 20 && now.second() < 10 ) { digitalWrite(Relay, LOW); } else digitalWrite(Relay, HIGH); }
Ну что вы прям совсем? А подумать? Переведите всё в секунды, делов-то. И условие сократится не по-детски: Код (C++): unsigned long curSeconds = (now.hour()*60 + now.minutes())*60; if(curSeconds > (21*60+20)*60 && curSeconds < (21*60+20)*60+10) { // выполняем условие между 21:20:00 и 21:20:10 } Компилятор сам посчитает на этапе компиляции все чиселки в условии, и работать всё это будет быстро. А хотите - можно и на калькуляторе перемножить
у меня почему -то вылезает ошибка при компиляции, как будто функция "now" не указана, хотя она является частью библиотеки rtclib
Еще, как вариант так (между 21:20:20 и 21:20:30): Код (C++): if (now.hour() == 21 && now.minute() == 20 && ( now.second() >= 20 && now.second() < 30) ) { или так (между 21:20:00 и 21:20:10): Код (C++): if (now.hour() == 21 && now.minute() == 20 && now.second() < 10 ) {