Таймер

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

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

Для таких целей напишем функцию, параметрами которой будет номер таймера и его периодичность:

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
}

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

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

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

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *