Таймер. 5

Как посылать сигнал на один из выводов с одной периодичность, а на другой вывод с другой периодичностью?

При использовании команды delay(), главный цикл программы, каждый раз будет останавливаться для отсчета заданного времени, что не очень хорошо.
Как быть, если нам нужно выполнять код программы постоянно, а какой то опрос или вывод делать периодично.
Для таких целей напишем функцию, параметрами которой будет номер таймера и его периодичность

1
2
3
4
5
6
7
8
9
10
11
12
unsigned long _old[1];//массив для хранения последних данных о времени срабатывания таймера.Количество элементов соответствует количеству таймеров
 
boolean my_(unsigned long time, byte nomer)//функция , time-время задержки, nomer-номер таймера
{
  unsigned long current_millis;//текущее значение миллисекунды
  current_millis=millis();
  if (current_millis-millis_old[nomer]>time) //если время срабатывания таймера наступило
  {
    millis_old[nomer]=current_millis;//перезаписываем время последнего срабатывания таймера
    return true;//возвращаем true
  } else return false;//возвращаем false
}
unsigned long millis_old[1];//массив для хранения последних данных о времени срабатывания таймера.Количество элементов соответствует количеству таймеров

boolean my_timer(unsigned long time, byte nomer)//функция таймер, time-время задержки, nomer-номер таймера
{
  unsigned long current_millis;//текущее значение миллисекунды
  current_millis=millis();
  if (current_millis-millis_old[nomer]>time) //если время срабатывания таймера наступило
  {
    millis_old[nomer]=current_millis;//перезаписываем время последнего срабатывания таймера
    return true;//возвращаем true
  } else return false;//возвращаем false
}

Использование функции

1
2
3
4
5
6
7
8
 
void loop 
  {
   if (my_timer(10000,0))//если таймер №0, отсчитал 10 секунд
      {
       //выполняем наши действия
      }
  }
 
void loop 
  {
   if (my_timer(10000,0))//если таймер №0, отсчитал 10 секунд
      {
       //выполняем наши действия
      }
  }

Функция my_timer вернет true при отсчете времени не менее заданного

5 комментс для “Таймер.

  1. Ответить Валерий Янв 14, 2016 23:32

    Привет всем,
    А как сделать с кнопками к примеру старт и стоп.
    И кнопками редактировать нужное время отчета?

    Заранее спасибо.

    Валерий

  2. Ответить Валерий Фев 9, 2016 21:39

    Я работаю над конролером для сауны. И хотелось бы выставлять время к примеру на 4 или 6 часов. После истечении время всё отключить автоматичиски.

    Заранее спасибо.

    Валерий

    • Ответить Slava Фев 10, 2016 09:42

      Нужно просто добавить сброс таймера и его остановку по истечению заданного времени

  3. Ответить Валерий Фев 21, 2016 12:01

    А как ето сделать?

Добавить комментарий