+2 голосов
Мне необходимо считывать данные с датчика ровно один раз в минуту. delay() я использовать не могу, так как между считываниями должен выполняться ещё код. Какие функции можно использовать, чтобы считывать данные строго через равные промежутки времени?
(917 баллов) 5 60 103

1 Ответ

+2 голосов
 
Лучший ответ

Существует 2 способа:
1. Проверять в основном цикле не прошло ли достаточно времени для того чтобы прочитать данные датчика ( классический пример Мигаем светодиодом без delay() )
2. Использовать прерывание по таймеру (работа основной программы будет приостанавливаться и выполняться необходимый Вам код для опроса датчика).
Подробнее можно ознакомится здесь: Использование прерываний в Arduino
2-й метод даст большую точность, но при использовании платформы Ардуино нужно учитывать, что таймеры могут принимать участие в работе некоторых библиотек(например Servo) и генерации сигнала ШИМ на выходах платы. Также необходимо учитывать то, что код внутри прерывания должен выполняться максимально быстро - т.е. опрос датчика не должен занимать длительное время в противном случае могут возникнуть проблемы с выполнением программы в основном цикле.

(1.2 тыс. баллов) 3 23 49
выбран
Добро пожаловать на Бредборд! Сайт вопросов и ответов на тему Arduino, Raspberry Pi и хоббийной электроники в целом. Цель Бредборда — быть максимально полезным. Поэтому мы строго следим за соблюдением правил, боремся с холиворами и оффтопиком.
  1. parovoZZ

    128 балл(ов)

  2. Un_ka

    106 балл(ов)

  3. Евгений Евтишенков

    44 балл(ов)

  4. sser

    22 балл(ов)

  5. Валентин

    5 балл(ов)

  6. issaom

    5 балл(ов)

Награды месяца
1-е место: Espruino Pixl.js
2-е место: Espruino Puck.js
3-е место: Espruino Pico

...