В принцепи всё довольно просто. Arduino в зависимости от времени включает фонарь с вентилятором.
Когда тестирую на секундах, например с 1 по 30 выключить, с 31 по 60 включить. Всё прекрасно работает.
Но когда я перехожу на часы Arduino будто зависает.
Когда наступает время выключения, лампа не выключается. Отключаю всё от питания, влючаю, лампа не выключина как и должна. Аналогичная ситуация происходит и с включением.
По логам время оприделяется и условия отрабатывают правильно.
В электротехнике не очень силён, может резистор какой добавить…
Использую:
Arduino UNO R3 (ATMega328/CH340G)
Релейный модуль 2 канала
Модул часов реального времени (RTS) DS1307
Силовое реле
Скетч:
if( millis()%1000==0 ){//Если прошла 1 секунда.
// Управление светом и охлаждением лампы (Включение на 14 часов (с 6 до 20))
if(watch.Hours>=6 && watch.Hours<=19){// Если время в промежутке от 6 утра до 20
pinMode(lightPin, OUTPUT);
pinMode(lightFanPin, OUTPUT);
Serial.println("light:on");
} else {
Serial.println("light:off");
pinMode(lightPin, INPUT);
pinMode(lightFanPin, INPUT);
}
}
}```
в 3 строке
На сколько я понял watch.begin(&Wire); открывает соединения с часами.
И уже в условии я получаю текущее время if(watch.Hours>=6 && watch.Hours<=19)
//
// Для работы с модулями, в библиотеке реализованы 5 функции:
// инициировать модуль begin();
// указать время settime(секунды [, минуты [, часы [, день [, месяц [, год [, день недели]]]]]]);
// получить время gettime("строка с параметрами");
// мигать времем blinktime(0-не_мигать / 1-мигают_сек / 2-мигают_мин / 3-мигают_час / 4-мигают_дни / 5-мигают_мес / 6-мигает_год / 7-мигают_дни_недели / 8-мигает_полдень)
// разгрузить шину period (минуты);
//
// Функция begin():
// функция инициирует модуль: проверяет регистры модуля, запускает генератор модуля и т.д.
//
// Функция settime(секунды [, минуты [, часы [, день [, месяц [, год [, день недели]]]]]]):
// записывает время в модуль
// год указывается без учёта века, в формате 0-99
// часы указываются в 24-часовом формате, от 0 до 23
// день недели указывается в виде числа от 0-воскресенье до 6-суббота
// если предыдущий параметр надо оставить без изменений, то можно указать отрицательное или заведомо большее значение
// пример: settime(-1, 10); установит 10 минут, а секунды, часы и дату, оставит без изменений
// пример: settime(0, 5, 13); установит 13 часов, 5 минут, 0 секунд, а дату оставит без изменений
// пример: settime(-1, -1, -1, 1, 10, 15); установит дату 01.10.2015 , а время и день недели оставит без изменений
//
// Функция gettime("строка с параметрами"):
// функция получает и выводит строку заменяя описанные ниже символы на текущее время
// пример: gettime("d-m-Y, H:i:s, D"); ответит строкой "01-10-2015, 14:00:05, Thu"
// пример: gettime("s"); ответит строкой "05"
// указанные символы идентичны символам для функции date() в PHP
// s секунды от 00 до 59 (два знака)
// i минуты от 00 до 59 (два знака)
// h часы в 12-часовом формате от 01 до 12 (два знака)
// H часы в 24-часовом формате от 00 до 23 (два знака)
// d день месяца от 01 до 31 (два знака)
// w день недели от 0 до 6 (один знак: 0-воскресенье, 6-суббота)
// D день недели наименование от Mon до Sun (три знака: Mon Tue Wed Thu Fri Sat Sun)
// m месяц от 01 до 12 (два знака)
// M месяц наименование от Jan до Dec (три знака: Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec)
// Y год от 2000 до 2099 (четыре знака)
// y год от 00 до 99 (два знака)
// a полдень am или pm (два знака, в нижнем регистре)
// A полдень AM или PM (два знака, в верхнем регистре)
// строка не должна превышать 50 символов
//
это не функция включения/выключения пинов, вам просто повезло что это работает (если работает вообще)
и на схеме у вас нет соединения общего провода и земель ардуино и RTC
короче ФАРШ отменный)
За сегодня уже второй товарищ, которому лень примеры от библиотеки поглядеть, описание почитать. Опять же примеры из IDE почему не глянуть, чтобы такие чудеса про pinMode не писать? Жуть…
pinMode(OUTPUT) выдает на пин низкий уровень, а pinMode(INPUT) - переводит пин в Z-state. Если пин реле управляется низким уровнем и притянут к VCC- может и сработать