Нужна помощь в скетче для работы с DS3231 чтобы сделать программируемое освещение.

27.12.2018
9
0
1
#1
Приветствую уважаемых!
Требуется помощь в написании скетча.
Идея такая: требуется локальное освещение на книжной полке. Задача в том, чтобы освещение включалось 2 или три раза в сутки по часам. Например, утром с 7 утра до 10 утра и вечером с 19 до 23. Для реализации планируется использование "Наны", DS3231, светодиодный модуль на 4 светодиода и аккумулятор на 12 В. В меру крупный. Примерно на килограмм. :)
Собственно, никак не получается запрограммить включение-выключение несколько раз в день.
(т.е. в 3231 есть 2 будильника. Но если их "завести" на вкл-выкл, то не получается сделать второй и третий вкл-выкл).
Поможите решить сию проблему?
 
#2
А я бы замутил прерывание по таймеру. К примеру раз в 5 минут. И в обработчике считывал время.
Далее одна глобальная переменная, которая показывает включена подсветка сейчас или нет.
Ну и время если попадает в интервал, то включаешь если еще не включено.
Ну и если не попадает - выключаешь если не выключено.
 

EandV

Проходящий мимо
04.08.2018
234
92
28
#3
@-=MIG=-,

Привет!

Вот тут выкладывал пример скетча по работе с DS3231:

https://community.alexgyver.ru/threads/modul-realnogo-vremeni-ds3231.684/

По поводу конкретной задачи.Присваиваем переменным значение часов с модуля. Если час = 7, то включаем освещение, если час равен 10, то выключаем и т.д. Ну и еще нужна переменная флаг, которая показывает включен или выключен свет.
 

EandV

Проходящий мимо
04.08.2018
234
92
28
#4
А я бы замутил прерывание по таймеру. К примеру раз в 5 минут. И в обработчике считывал время.
Далее одна глобальная переменная, которая показывает включена подсветка сейчас или нет.
Ну и время если попадает в интервал, то включаешь если еще не включено.
Ну и если не попадает - выключаешь если не выключено.
Так в принципе можно, только точности не будет нормальной. Внутренние таймеры вотчдога и прерывания имеют некоторую погрешность, которая не особо заметна, если интервалы в несколько минут, а вот если речь идёт о часах и днях, тот тут уже разница заметнее. Сам проверял на своей системе автополива. Пришел к выводу, что если нужна точность, правильнее показания снимать с DS3231
 
#5
Так в принципе можно, только точности не будет нормальной. Внутренние таймеры вотчдога и прерывания имеют некоторую погрешность, которая не особо заметна, если интервалы в несколько минут, а вот если речь идёт о часах и днях, тот тут уже разница заметнее. Сам проверял на своей системе автополива. Пришел к выводу, что если нужна точность, правильнее показания снимать с DS3231
Я поэтому и предложил, т.к. на мой взгляд точность не нужна. Я бы уходил в sleepmode и экономил батарейку
 

EandV

Проходящий мимо
04.08.2018
234
92
28
#6
Я поэтому и предложил, т.к. на мой взгляд точность не нужна. Я бы уходил в sleepmode и экономил батарейку
А что мешает уходить в сон, периодически просыпаться, проверять показания модуля и опять засыпать? По экономии то же самое получается, а точность не сравнить.
 
27.12.2018
9
0
1
#7
Со слип-модом отдельная проблема как из него выходить.
Действительно, придется периодически просыпаться, а значит снова считать эти периоды. В общем, "с засыпанием не хорошо получилось"
точность, действительно, не нужна. Вполне достаточно проверять только часы. без минут. Но стоит вопрос "как часто" надо проверять...
 

EandV

Проходящий мимо
04.08.2018
234
92
28
#8
Со слип-модом отдельная проблема как из него выходить.
Действительно, придется периодически просыпаться, а значит снова считать эти периоды. В общем, "с засыпанием не хорошо получилось"
точность, действительно, не нужна. Вполне достаточно проверять только часы. без минут. Но стоит вопрос "как часто" надо проверять...
Вот здесь мой проект системы автополива. В том числе и скетч. Там как как раз реализован уход в сон, выход из сна, снятие показаний с DS3231, включение помпы в определенное время. Если вкратце раз в 8 секунд система просыпается и считывает данные с модуля времени. Уход в сон я делал только потому, что система автономная и питается от аккумуляторов. Если питание сетевое, то уход в сон не нужен.

https://community.alexgyver.ru/threads/avtonomnyj-avtopoliv-na-1-12-komnatnyx-rastenij.189/

По поводу частоты проверки. Если ухода в сон не будет, можно поставить любую периодичность с помощью функции millis, хоть раз в секунду, хоть раз в час.
 
27.12.2018
9
0
1
#9
EandV, спасибо большое.
Приду в себя - попробую разобраться. Если честно, то выглядит сложнова-то. (или НГ тому виной)
 
27.12.2018
9
0
1
#10
...я уж тут размечтался: если когда-нибудь руки дойдут до часов на ГРИ? то было бы здорово нужную мне "подсветку" в туда вкрутить. :)))
 
27.12.2018
9
0
1
#12
Коллеги,
Прошу прощения за молчание: у меня был НовыйГод и Рождество. Пришел в себя только ща...
Признаться, ситуация преглупейшая: при абсолютно простых исходных данных и абсолютно незатейлевом скетче с этой же страницы:
#include <iarduino_RTC.h>
iarduino_RTC time(RTC_DS1307);
void setup() {
delay(300);
Serial.begin(9600);
time.begin();
}
void loop(){
if(millis()%1000==0){ // если прошла 1 секунда
Serial.println(time.gettime("d-m-Y, H:i:s, D")); // выводим время
delay(1); // приостанавливаем на 1 мс, чтоб не выводить время несколько раз за 1мс
}
}
не могу написать два срабатывания. Получается 4 события, а этого "встроенный" в 3231 будильник делать уже не умеет. В общем, помогите