Действия по времени

ronny99
Offline
Зарегистрирован: 10.09.2013

Здравствуйте, собственно задача управлять нагрузками в определённое время, но так, чтобы loop выполнялся не зависимо от времени... что-то типа

int time; //какая-то переменная с временем
void loop(){
if(time == 14.40 ){ ...действие1 }
if(time == 16.20 ){ ...действие2 }
if(time == 19.55 ){ ...действие3 }
...
}

Может гуру подскажут варианты реализаций...заранее спасибо!

В программировании новичёк, изредко работаю с php, так что не пинайте...

maksim
Offline
Зарегистрирован: 12.02.2012
25 мар 2011 ... Всем Привет! Подскажите, как создать таймер? Верх. Войдите или зарегистрируйтесь, чтобы получить возможность отправлять ...
arduino.ru/forum/obshchii/taimer
18 мар 2013 ... Требуется каждые 15 секунд включать реле и на 240 секунд отключать. Что сделать с millis() чтоб такое реализовать?
arduino.ru/forum/.../taimer-dlya-arduiny
23 авг 2012 ... Доброе время суток. Помогите разобратся с таймером. Задача заключается в том чтобы ардуино давала импульс на тригер (не знаю ...
arduino.ru/forum/obshchii/avtomatizatsiya-taimer
6 июл 2013 ... Задача: сделать таймер полива без привязки к реальному времени определяющий время суток. Подошла бы полная копия такого ...
arduino.ru/.../taimer-poliva-s-detektirovaniem-dnya-i-nochi
19 фев 2013 ... Всем доброе время суток)) не могу понять почаму не отрабатывает таймер ?
arduino.ru/forum/obshchii/taimer-na-ds1307
17 мар 2013 ... Попробывал создать код для управления клапаном.Пока не нажата кнопка - клапан закрыт. При нажатии и удержании кнопки клапан ...
arduino.ru/.../taimer-periodicheskogo-vklyucheniya-nagruzki

 

ronny99
Offline
Зарегистрирован: 10.09.2013

Спасибо за ссыли из гугла, аж неудобно стало что не нашел сам :)

Вот идея с часами DS1307 приглянулась, тоесть можно будет сделать как-то так?

void loop()
{
  int Hour = RTC.get(DS1307_HR,true); 
  int Minute = RTC.get(DS1307_MIN,true); 

  if( Hour = 14 && Minute = 20 ){digitalWrite(my1_PIN, HIGH)}
  else digitalWrite(my1_PIN, LOW);
  if( Hour = 16 && Minute = 40 ){digitalWrite(my2_PIN, HIGH)};
  else digitalWrite(my3_PIN, LOW);
  // и так далее
  ...
  // прочий код программы
}

 

toc
Offline
Зарегистрирован: 09.02.2013

ronny99, если будете добавлять более сложные действия учтите, что за одну минуту; например, пока на часах 14:20 метод loop может прокрутиться более одного раза, а может и более тысячи раз...

ronny99
Offline
Зарегистрирован: 10.09.2013

спасибо, а если например нужно включать что-либо на 20 минут каждые 2 часа, как лучше реальзовать?

std
Offline
Зарегистрирован: 05.01.2012
if(hr%2==0 && min==0 && sec==0) digitalWrite(relay,HIGH);
if(hr%2==0 && min==20 && sec==0) digitalWrite(relay,LOW);

Защита от отключения в случае случайной перезагрузки (или если повиснет):

boolean bState;
bState=digitalRead(relay);
if(hr%2==0 && min>=0 && min<20 && !bState) digitalWrite(relay,HIGH);
if(hr%2==0 && min>=20 && bState) digitalWrite(relay,LOW);
astronom3
astronom3 аватар
Offline
Зарегистрирован: 28.03.2017

Зачем нужно "hr%2"???

JasKo
Offline
Зарегистрирован: 21.11.2015

astronom3 пишет:

Зачем нужно "hr%2"???

На языке программирования это и есть "каждые два часа". (Остаток от деления на 2).

astronom3
astronom3 аватар
Offline
Зарегистрирован: 28.03.2017

А если нужно каждую минуту? То"min%1"???

JasKo
Offline
Зарегистрирован: 21.11.2015

astronom3 пишет:

А если нужно каждую минуту? То"min%1"???

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

astronom3
astronom3 аватар
Offline
Зарегистрирован: 28.03.2017

И что можно сделать? Задержку ввести?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

astronom3 пишет:

А если нужно каждую минуту? То"min%1"???

Микросхема часов сама умеет выдавать прерывания раз в минуту. Надо просто завести его на пин и обрабатывать.

Кроме того, Вы сами-то видите, что Вы пишете? Вам же сказали, % - остаток от деления. Какой нахрен "min%1"????? Чему по-Вашему равен остаток от деления ЛЮБОГО целого числа на единицу?

astronom3
astronom3 аватар
Offline
Зарегистрирован: 28.03.2017

ЕвгенийП пишет:

astronom3 пишет:

А если нужно каждую минуту? То"min%1"???

Микросхема часов сама умеет выдавать прерывания раз в минуту. Надо просто завести его на пин и обрабатывать.

Кроме того, Вы сами-то видите, что Вы пишете? Вам же сказали, % - остаток от деления. Какой нахрен "min%1"????? Чему по-Вашему равен остаток от деления ЛЮБОГО целого числа на единицу?

- Мне нужно раз в секунду и раз в минуту...

Завел на пин, а дальше? мне-то нужно генерировать меандр..

 

- остаток будет равен нулю (если число целое).. Надо наверно писать сек%60 для минут и %1000 для секунд?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

astronom3 пишет:

- Мне нужно раз в секунду и раз в минуту...

Она умеет и раз в минуту и раз в секунду (а заодно и раз в час и раз в сутки).

А что потом делать, что надо, то и делайте. Пришло на пин прерывание, вот и деоатйте что Вам нужно. Но не нужны никакие "спрашивания времени" и дурацкие сравнения, которые Вы к тому же писать не умеете