Как Blink встроить в таймер

braslav
braslav аватар
Offline
Зарегистрирован: 25.02.2017

Я не издеваюсь, я учусь - Учиться лучше всего на ошибках, лучше запоминается

if  ( (now.hour() > on ) && ( (now.hour() < off )))  Tak.loop();

 

После многочисленных экспериментов выяснил что последняя строка должна быть такой: 

if  ( (now.minute() >= on ) && ( (now.minute() < off )))  Tak.loop();

bwn
Offline
Зарегистрирован: 25.08.2014

Как и думал, Влад же написал, "Поставьте жестко условие - ВЫКЛЮЧЕНИЯ". Включение должно остаться - больше или равно, у Вас же включится на час позже и тут же выключится, т.к разбег один час.
А по часу ждать, когда сработает, грустно.((((

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Браслав, слушайте bwn.Он все верно говорит.

А я пойду самогончик пить. Мне в том году из-под Киева прислали живую зубровку, траву. Жена высадила и теперь у меня в подмосковье есть своя зубровка. Я по три травинки на поллитра самогона положил - честно скажу - слишком много! Нужно не больше одной.

Но очень вкусно!

braslav
braslav аватар
Offline
Зарегистрирован: 25.02.2017

Папа не верит пока не проверит!

Проверил и теперь все классно работает! 

Как здорово, что вы все встретились мне на этом форуме! Какие вы молодцы, пока не соритесь! Большое спасибо.

if  ( (now.minute() >= on ) && ( (now.minute() < off )))  Tak.loop();

Пока часами ожидание включения или выключения, сделал исполнительное устройство. Завтра все соберу и сниму кино, как работает.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

wdrakula пишет:

Браслав, слушайте bwn.Он все верно говорит.

А я пойду самогончик пить. Мне в том году из-под Киева прислали живую зубровку, траву. Жена высадила и теперь у меня в подмосковье есть своя зубровка. Я по три травинки на поллитра самогона положил - честно скажу - слишком много! Нужно не больше одной.

Но очень вкусно!

МАЛОВАТО БУДЕТ
Эталон -

 

bwn
Offline
Зарегистрирован: 25.08.2014

braslav пишет:

После многочисленных экспериментов выяснил что последняя строка должна быть такой: 

if  ( (now.minute() >= on ) && ( (now.minute() < off )))  Tak.loop();

Это только для отладки. Для готового девайса, поставьте часы на место.))))

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

braslav пишет:

"состояния и сигналы переходов между ними"  я это прекрасно понял. Только я боюсь не успею все это изучить. Есть очень простое программирование, как блинк, например. Здесь нет ни одного вопроса

Дело в том, что автоматное программирование - это основы. Без них - никуда.
Блинк - это хорошо, а blink without delay смотрели? 
А чем они отличаются? 
тем, что второй - это уже автоматное программирование.
Идея проста: есть переменная, которая может принимать несколько наперед заданных состояний (в blink without delay - 2 состояния).
И есть таблица переходов между состояниями в зависимости от внешних условий.
Ну и, разумеется, в каких состояниях выполняются какие действия (кроме переходов), т.е. включаются электромоторы, передается сигнал на спутник и т.п.
Собственно - все, остальное уже можно додумать, исходя из своей задачи.
 
Цитата:
 
 
Если бы у меня было побольше времени. Мне 67 лет исполнилось 7 июля. НО этот проект мой, думаю, не последний.

 

С днем рождения! (правда, прошедшим)

И почему новички так любят упирать на свой возраст?

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

wdrakula пишет:

2.1. Если мне без спора указать на ошибку я ВСЕГДА признаю свои ошибки.

Ой ли?

Или Вы всерьез считаете, что в арифметике существует такое понятие как полугруппа?

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

andriano пишет:

wdrakula пишет:

2.1. Если мне без спора указать на ошибку я ВСЕГДА признаю свои ошибки.

Ой ли?

Или Вы всерьез считаете, что в арифметике существует такое понятие как полугруппа?

Нет, тут все проще. Я же математик. Нет такой науки и такого раздела, как арифметика.

Либо ты знаешь математику, либо нет. Но тебе это трудно будет понять. Не напрягайся.

Причем я понимаю, что ты думаешь иначе, но тут нет ни твоей ни моей ошибки. Если понятие обратная операция и замыкание по операции - интуитивно не очевидны для тебя - то это просто вот так есть, и только для тебя.

Я имел опыт преподавания не только взрослым, но и детям, что, как бы, научно чище - ибо дети лишены бэкграунда.

Идея добавить к множеству результат проведениея некой операции над элементами - детям очевидна, а тебе нет. Это не свойство мира, а факт твоей тупости. Уж прости. Ты ведь до сих пор не понял, что такое мнгновенное значение сопротивления у конденсатора? ;) ;) ;) а это была наша самая первая стычка. ;)

Вот ведь странный человек. По последующим пересечениям на форуме, ты ведь явно понял, что по образованию, эрудиции и пр. тебе не стоит со мной письками меряться. Но, тем не менее переодически попердываешь. Зачем?

Повторю то, что сегодня уже говорил, , даже капсом: НИКОГДА НЕ НУЖНО СО МНОЙ СПОРИТЬ, если я не прав - приведи аргумент. Не свое убеждение, типа того, что арифметика - самостоятельная дисциплина, (неожиданно!) отдельная от остальной математики, а строгий аргумент.

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

wdrakula пишет:

Нет, тут все проще. Я же математик. Нет такой науки и такого раздела, как арифметика.

Ну т.е. все, что изучают в начальной школе - это неправильно?

Цитата:

Либо ты знаешь математику, либо нет. Но тебе это трудно будет понять. Не напрягайся.

Нет никакой единой математики. Есть отдельные ее разделы, которые принимают разные допущения.

На мой вопрос "Допустимо ли извлекать корень из -1" ты так и не ответил.

Могу продолжить: сколько можно провести через точку прямых параллельных данной?

Цитата:

Причем я понимаю, что ты думаешь иначе, но тут нет ни твоей ни моей ошибки. Если понятие обратная операция и замыкание по операции - интуитивно не очевидны для тебя - то это просто вот так есть, и только для тебя.

Так никто не спорит о существовании таких понятий. Но вот что во всех дисциплинах, где есть обратная операция, одновременно есть замыкание - не факт. Чтобы существовало замыкание, обыязательно должно быть понятие уравнение, а из существования операции существование уравнения никак не следует.

Цитата:

Идея добавить к множеству результат проведениея некой операции над элементами - детям очевидна, а тебе нет.

Дети знают, что такое полугруппа?

Так что ты сам себе противоречишь - обратная операция выводится отнюдь не из теории групп.

Цитата:

Это не свойство мира, а факт твоей тупости. Уж прости. Ты ведь до сих пор не понял, что такое мнгновенное значение сопротивления у конденсатора?

И до сих пор продолжаю считать, что если у конденсатора и есть какое-то сопротивление отличное от бесконечности - то это исключительно результат несовершенства. Импеданс - да, но это отнюдь не сопротивление.

И не нужно давить на свои образование и эрудицию. Они, конечно, внушают уважение, но любому человеку свойственно ошибаться. Особенно в том случае, когда он полагает, что всегда прав.

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Та. Вы не учитываете наличие человеческой тупости и идиотизма, которые, как показывает практика, глубоки и бесконечны.  Ладно бы где-то, но следы этого обнаруживаешь даже у ближашего окружения, и даже у себя, если внимательно приглядется. 

ПС: Вот ролик для "математиков" и "чертежников".https://www.youtube.com/watch?v=m8HOYVRPLBI

braslav
braslav аватар
Offline
Зарегистрирован: 25.02.2017

Если взять кусок телевизионного кабеля, это устройство тоже можно рассматривать как конденсатор. У него есть сопротивление.

И почему новички так любят упирать на свой возраст? Крыть больше нечем!

За вашим спором свои уроки найти не могу... 

 

 

braslav
braslav аватар
Offline
Зарегистрирован: 25.02.2017

Как-то после выпивки wdrakula затих, пропал можно сказать.

Есть вопросы:

1. Прочитать текущее время от часов. (У разных часов или разных библиотек, или разных способов код будет разный?)

2. Прочитать текущее значение внутреннего счетчика миллисекунд. (Где я должен искать код для этого случая?)

3. Отобразить время на экране (этот момент мы потом уточним). 

4. сравнить время часов с "утро" и "вечер", если нужно включить сигнал СТАРТ или СТОП. (Имеется в виду АМ - РМ ?)

5. сравнить текущее значение миллисекунд с взведенным таймером (если взведен), если время пребывания в соответствующем СОСТОЯНИИ прошло - включить сигнал ТАЙМЕР. (Сравнить время из пункта 2 с заданным в таймере?)

bwn
Offline
Зарегистрирован: 25.08.2014

1. Разные библиотеки делают это по разному (смотрим в примерах к библиотеке).
2. Ваша UL-переменная = millis();
3. Отображаете как сейчас.
4. Ваша строка с IF-ом. (Вместо ON-OFF можете ставить конкретные значения).
5. Про блинк без делей, хорошо здесь. Можно и остальное почитать.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Дак тута все олкаголеки после самогона затихают. Холодного касаясь стекла, раняя пепел на стол....

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Я просто домом занимаюсь... Сорри. Бвн все верно написал.
Я, грешным делом, решил, что есть рабочий код и вы не станете изучать автоматное програмирование.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

DetSimen пишет:

Дак тута все олкаголеки после самогона затихают. Холодного касаясь стекла, раняя пепел на стол....

насчет всех ты дед погорячился, я к примеру практически не пью )))
 

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Я пью по 0.5 каждый день уже 20 лет.... Меня так просто не возьмешь ;-). Во мне весу 150кг....

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

wdrakula пишет:
Я просто домом занимаюсь... Сорри. Бвн все верно написал. Я, грешным делом, решил, что есть рабочий код и вы не станете изучать автоматное програмирование.

Виталий, чую рецепт степного супчика от тебя не дождёшься )))

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

wdrakula пишет:
Я пью по 0.5 каждый день уже 20 лет.... Меня так просто не возьмешь ;-). Во мне весу 150кг....

а как же высказыванием ...кто с водкой дружен тому хрен не нужен???

braslav
braslav аватар
Offline
Зарегистрирован: 25.02.2017

3. Отображаете как сейчас. 

Этот код (отображение) разбросан по всему коду в разных местах и завязан на все остальное. Его нельзя взять куском вставить в другой прект и все заработает.

Я занимаюсь вэбдизайном и могу кусок кода вставить в любую страницу, и этот кусок будет работать. 

Ожидал такого же. У меня в голове новый проект, а я снова у разбитого корыта, сам ничего не смогу создать.

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

braslav пишет:

3. Отображаете как сейчас. 

Этот код (отображение) разбросан по всему коду в разных местах и завязан на все остальное. Его нельзя взять куском вставить в другой прект и все заработает.

Я занимаюсь вэбдизайном и могу кусок кода вставить в любую страницу, и этот кусок будет работать. 

Ожидал такого же. У меня в голове новый проект, а я снова у разбитого корыта, сам ничего не смогу создать.

Вы очень описательно задаете вопросы. Постарайтесь конкретнее.

Например - отображение. Почему Вы решили, что "код разбросан"? Что вы имеете ввиду?

---------------------

Короче так: Задавайте конкретый вопрос, а не "плач Ярославны", о том, что сами ничего не можете создать.

Изучите, наконец, код "блинк без делей". В нем заложены основы автоматного подхода.

Очень неплохо бы прочитать статью "конечные автоматы" в любой энциклопедии.

И последнее - лучше бы забыть про веб-дизайн и, по крайней мере, на програмистском форуме, в этом не признаваться (шутка). Но в этой шутке есть доля правды: к великому сожалению, легче стоматолога научить програмированию, чем веб-разработчика. Ибо последний верит, что что-то знает.

bwn
Offline
Зарегистрирован: 25.08.2014

braslav пишет:

3. Отображаете как сейчас. 

Этот код (отображение) разбросан по всему коду в разных местах и завязан на все остальное. Его нельзя взять куском вставить в другой прект и все заработает.

Для всех LCD, типа 1602, для отображения всего 2 команды: setCursor и print. Их и используете по мере надобности, если вывода много, то можно создать одну функцию для вывода на дисплей с параметрами и вызывать ее когда требуется, передав все необходимое (позицию, переменную).

braslav
braslav аватар
Offline
Зарегистрирован: 25.02.2017

От wdrakula сразу 150 кг упреков. Вам про водку можно, а мне уже и поплакаться нельзя (шутка). Слова Изучите, наконец, код "блинк без делей" говорят о том, что я уже начал  раздражать.

ОТ bwn  "всего 2 команды: setCursor и print" Эти команды как раз мне понятны, а вот написанное вначале просто темный лес.

Это один блок для вывода
//----Класс отображающий время на ЛСД 1602 
 
class ShowTime {
  uint32_t om;
  public:
  ShowTime() {};
  void setup() {om=millis();}
  void loop(DateTime now) 
  {
    char s[16] = "  00:00:00   ";
    uint32_t cm = millis();
    if (cm - om > 999)
    {
      lcd.setCursor(0,1);
      s[2] = '0'+ now.hour()/10;
      s[3] = '0'+ now.hour()%10;
      s[5] = '0'+ now.minute()/10;
      s[6] = '0'+ now.minute()%10;
      s[8] = '0'+ now.second()/10;
      s[9] = '0'+ now.second()%10;
      lcd.print(s);
      om=cm;
    }
  }
};
 
А это второй блок для вывода и еще ниже снова showTime упоминается. Значит структура имеет немаловажное значение, все должно быть по-порядку. О котором мне ничего не известно.
 
void setup() {
  Tak.setup();
  showTime.setup();
 
lcd.init();                      // initialize the lcd 
 
  // Print a message to the LCD.
  lcd.backlight();
  lcd.setCursor(2,0);
  lcd.print(on);
lcd.print("-ON, ");
  lcd.print(off);
  lcd.print("-OFF");
}

Ладно, буду изучать... Надо с самого начала

bwn
Offline
Зарегистрирован: 25.08.2014

Попробуйте не используя тот код, взять и написать его в последовательном виде, по трансильванскому, ранее данному алгоритму.
Как мерить интервалы ссылку дал.
Теперь берем большую задачу, расчленяем ее на маленькие самодостаточные кусочки, описываем эти кусочки кодом и начинаем их соединять. Все пойдет гораздо легче.

P.S. На сегодня откланиваюсь, гости на подходе.

P.P.S. Пример написания говнокода новичками. Основное достоинство, все работает.

braslav
braslav аватар
Offline
Зарегистрирован: 25.02.2017

Еще один вопрос. Будет ли разница при использовании arduino pro mini ? Сегодня спаял окончательный вариант, использовал arduino pro mini , Исправно отрабатывает включения и паузы, а дисплей не захотел работать.

bwn
Offline
Зарегистрирован: 25.08.2014

За исключением отсутствия USB, разницы не должно быть никакой, камень абсолютно тот же. Ищите проблему в коммутации.

braslav
braslav аватар
Offline
Зарегистрирован: 25.02.2017

Спасибо. Понятно. Видимо плата виновата. Коммутация слишком простая, чтобы запутаться. Побовал, всего-то 4 провода перекинуть, к одной уно - работает, к другой уно - работает, а к мини - не работает. Наверное порты А4, А5 не в порядке. Сегодня проверю работают ли часы, они тоже сидят на этих портах.

nik182
Offline
Зарегистрирован: 04.05.2015

Up

 

bwn
Offline
Зарегистрирован: 25.08.2014

braslav пишет:

Спасибо. Понятно. Видимо плата виновата. Коммутация слишком простая, чтобы запутаться. Побовал, всего-то 4 провода перекинуть, к одной уно - работает, к другой уно - работает, а к мини - не работает. Наверное порты А4, А5 не в порядке. Сегодня проверю работают ли часы, они тоже сидят на этих портах.

Вы их на соответствие пинов прозвоните, может умный Ляо SDA с SCL перепутал.

braslav
braslav аватар
Offline
Зарегистрирован: 25.02.2017

Проходим тестирование. Выяснилась непонятка

С задержкой 32000 и менее работает:

//-------------Cl_tik_tak-----------------
//задержка, работа,задержка, работа
const int Map[] = {32000, 500, 1000, 2000};
const byte num = 4;
 
А вот с такими задержками (больше 32000) уже не работает:
const int Map[] = {33000, 500, 1000, 2000};
const int Map[] = {34000, 500, 1000, 2000};
const int Map[] = {35000, 500, 1000, 2000};
 
 
kalapanga
Offline
Зарегистрирован: 23.10.2016

braslav пишет:

Проходим тестирование. Выяснилась непонятка

С задержкой 32000 и менее работает:

//-------------Cl_tik_tak-----------------
//задержка, работа,задержка, работа
const int Map[] = {32000, 500, 1000, 2000};
const byte num = 4;
 
А вот с такими задержками (больше 32000) уже не работает:
const int Map[] = {33000, 500, 1000, 2000};
const int Map[] = {34000, 500, 1000, 2000};
const int Map[] = {35000, 500, 1000, 2000};

В тип int максимум 32767 влезает. В шапочке нашего сайта ссылка Программирование там раздел Типы данных - выбирайте по потребностям!

braslav
braslav аватар
Offline
Зарегистрирован: 25.02.2017

Спасибо. Понятно. 

millis() 1000 в секунде

micros() 1 000 000 в секунде

А если нужно более продолжительную паузу?

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

braslav пишет:

Спасибо. Понятно. 

millis() 1000 в секунде

micros() 1 000 000 в секунде

А если нужно более продолжительную паузу?

Вот к примеру вам надо перенести килограм продуктов вы берете пластиковый пакет. Если 10 кг - пакет покрепче. если 50 кг то мешок. А если тонну то берете машину. Так и с числами .

http://arduino.ru/Reference/UnsignedLong

http://arduino.ru/Reference/Byte

http://arduino.ru/Reference/Int

Или вы берете 1тонну картошки и грузите в пакет на 10кг.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

braslav пишет:

Спасибо. Понятно. 

millis() 1000 в секунде

micros() 1 000 000 в секунде

А если нужно более продолжительную паузу?

миллис переполняется раз в 50 суток, еще больше паузу нужно?

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

braslav пишет:

Спасибо. Понятно. 

millis() 1000 в секунде

micros() 1 000 000 в секунде

А если нужно более продолжительную паузу?

более, чем что?

braslav
braslav аватар
Offline
Зарегистрирован: 25.02.2017

DetSimen  про 50 суток. Это не мой случай. Вот кусочек кода с паузами 32000 и 1000 миллисекунд. Хочу паузу большую чем 33000, но как я понял от qwone , в таком случае, нужно использовать не int, а byte или long. Правда я еще не знаю как их сюда пристроить. Там эти millis наверное нужно как-то переводить в другие цифры.

const int Map[] = {32000, 500, 1000, 2000};
const byte num = 4;
DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

const unsigned long Map[] = {320000UL, 500UL, 1000000UL, 2000UL};

да примерно так

unsigned long может хранить 4 миллиарда миллисекунд

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

braslav пишет:

Хочу паузу большую чем 33000

пауза большая, чем 33000 миллисекунд - это полтора миллиона лет.

вам сколько завернуть?

braslav
braslav аватар
Offline
Зарегистрирован: 25.02.2017

Щедрость Клапауций 112 просто зашкаливает. Наверное я что-то не то написал. Миллионы лет получать отказываюсь. У меня 33000 - это 33 секунды.

Спасибо DetSimen за подсказку, unsigned long работает как надо.

braslav
braslav аватар
Offline
Зарегистрирован: 25.02.2017

Хотел  написать в личку qwone, но никак не нашел такого входа...

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

braslav пишет:

Хотел  написать в личку qwone, но никак не нашел такого входа...

Зачем в личку @^@. В личку очень больно будет.

braslav
braslav аватар
Offline
Зарегистрирован: 25.02.2017

 

 

qwone - чего-то я недопонимаю. Если хочу обратиться к кому-то - какая проблема. Объясни пожалуйста. sosny77@gmail.com

braslav
braslav аватар
Offline
Зарегистрирован: 25.02.2017

Сочинил часы с модулем DS1302. Работают! 

//Часы DS1302 на LCD 16,2

#include <LiquidCrystal_I2C.h> // подключаем библиотеку для 
//работы с дисплеем по i2c
 #include <iarduino_RTC.h>
iarduino_RTC time(RTC_DS1302,10,13,12);// RST, CLK, DAT
LiquidCrystal_I2C lcd(0x3f, 16, 2);
  uint32_t om;
void setup()
{
    time.begin(); // запускаем часы
//time.settime(0,24,16,12,8,17,6);  // сек, мин, час, 27, 
//октября, 2015 года, вторник
  lcd.init(); // инициализируем дисплей
  lcd.clear();//очистить дисплей
 lcd.backlight();//включить подсветку
  lcd.setCursor(0,0); //кубик, первая строка
  lcd.print("DS 1302,LCD 16,2"); // выводим информацию
}
 
void loop()
{
 if(millis()%1000==0){ // если прошла 1 секунда
 lcd.setCursor(0,1);//кубик, вторая строка
 lcd.print(time.gettime("H:i:s")); // выводим время
      
 delay(1); // приостанавливаем на 1 мс, чтоб не выводить время 
//несколько раз за 1мс
    }
    }

Заменить в этом варианте кода часы 1307 на 1302, как не бился не получилось.

#include <LiquidCrystal_I2C.h>
#include "RTClib.h"

LiquidCrystal_I2C lcd(0x3f,16,2);
// *******************************************
// Здесь задаем время включения и выключения
int on=5; // Включаемся в Часов
int off=21; // Отключаемся в Часов
// *******************************************
//----Класс отображающий время на ЛСД 1602
class ShowTime {
  uint32_t om;
  public:
  ShowTime() {};
  void setup() {om=millis();}
  void loop(DateTime now) 
  {
    char s[16] = "  00:00:00   ";
    uint32_t cm = millis();
    if (cm - om > 999)
    {
      lcd.setCursor(2,1);
      s[2] = '0'+ now.hour()/10;
      s[3] = '0'+ now.hour()%10;
      s[5] = '0'+ now.minute()/10;
      s[6] = '0'+ now.minute()%10;
      s[8] = '0'+ now.second()/10;
      s[9] = '0'+ now.second()%10;
      lcd.print(s);
      om=cm;
    }
  }
};

//-------------Cl_tik_tak-----------------
//задержка, работа,задержка, работа
const unsigned long Map[] = {66000UL, 500UL};
const byte num = 2;


class Cl_tik_tak {
    byte takt;
    byte pin;
    bool led;
    uint32_t past;
  public:
    Cl_tik_tak(byte _pin): pin(_pin) {}
    void setup() {
      pinMode(pin, OUTPUT);
      takt = 0;
      past = millis();
      digitalWrite(pin, led = 0);
    }
    void loop() {
      if (millis() - past > Map[takt]) {
        past = millis();
        digitalWrite(pin, led = !led);
        ++takt;
        if (takt >= num) takt = 0;
      }
    }
};
//-------------компоновка-----------------
RTC_DS1307 RTC;
Cl_tik_tak Tak(/*нога*/13);
ShowTime showTime;
//--------------main---------------------
void setup() {
  Tak.setup();
  showTime.setup();

lcd.init();                      // initialize the lcd 
 
  // Print a message to the LCD.
  lcd.backlight();
  lcd.setCursor(2,0);
  lcd.print(on);
lcd.print("-ON, ");
  lcd.print(off);
  lcd.print("-OFF");
}

void loop() {
  DateTime now = RTC.now();
  showTime.loop(now);
  if  ( (now.hour() >= on ) && ( (now.hour() < off )))  Tak.loop();
 
}

 

braslav
braslav аватар
Offline
Зарегистрирован: 25.02.2017

Купил еще DS1307. На этом же принципе нужно сделать для включения и выключения новогодних гирлянд. 

Запаковано в корпус

braslav
braslav аватар
Offline
Зарегистрирован: 25.02.2017

Проверка показала, что с DS3231 работает. В скетче достаточно поменять название в одной строчке RTC_DS1307 RTC; на RTC_DS3231 RTC;

braslav
braslav аватар
Offline
Зарегистрирован: 25.02.2017

Здравствуйте, сообщество. Новый год приближается. Вопрос, что из этого кода нужно удалить, что указать, чтобы стал просто суточный таймер. Включает нагрузку в 17 часов, выключает в 23 часа. Прибор уже готов.

bwn
Offline
Зарегистрирован: 25.08.2014

braslav пишет:

Здравствуйте, сообщество. Новый год приближается. Вопрос, что из этого кода нужно удалить, что указать, чтобы стал просто суточный таймер. Включает нагрузку в 17 часов, выключает в 23 часа. Прибор уже готов.

Вы уже совсем заленились.)))) Выкинуть почти все, оставить считывание времени и два условия: если час >=17  &&  час<23 включить, если час >= 23 выключить.

braslav
braslav аватар
Offline
Зарегистрирован: 25.02.2017

Нашел в коде проблему. Если "задержка" больше "работы" все получается, вовремя, по часам,  включится и выключается. 

const int Map[] = {1000, 100};

А вот если наоборот, то по времени не выключается! Например так : const int Map[] = {100, 1000};

braslav
braslav аватар
Offline
Зарегистрирован: 25.02.2017

Написал такой таймер. Работает. 

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include "RTClib.h"
LiquidCrystal_I2C lcd(0x3f,16,2);

RTC_DS1307 RTC;
int releyPin = 13;
// Вписываем время включения и выключения
//****************************************
int on=17; // Включаемся в Часов
int off=23; // Отключаемся в Часов
//****************************************
void setup () {
    Wire.begin();
    RTC.begin();
    lcd.init(); // initialize the lcd
    lcd.backlight();
    pinMode(releyPin, OUTPUT);
  }

void loop() {
 DateTime now = RTC.now();
    lcd.clear();
    lcd.setCursor(0,0);
  lcd.print(on);
lcd.print("-ON     ");
  lcd.print(off);
  lcd.print("-OFF");
    lcd.setCursor(4, 1);
    lcd.print(now.hour(), DEC);
    lcd.print(':');
    lcd.print(now.minute(), DEC);
    lcd.print(':');
    lcd.print(now.second(), DEC);
    delay(1000);
    digitalWrite(releyPin, LOW);
  if  ( (now.hour() >= on ) && ( (now.hour() < off ))) digitalWrite(releyPin, HIGH);
}