Ограничение частоты вывода данных от ADXL345

У меня есть работающий ADXL345, подключенный к Arduino UNO, мне нужно ограничить скорость, с которой ADXL345 снимает показания. Я использую библиотеку SparkFun для этого датчика. Я читал о функции задержки, и она работает в функции цикла, но мне было интересно, может быть, есть лучший способ, который будет намного эффективнее?

, 👍0


1 ответ


Лучший ответ:

0

Каждый раз, когда вы получаете значение от датчика (например, с помощью getX() или других), библиотека взаимодействует с датчиком по I2C или SPI. Таким образом, вы можете ограничить использование этих функций в своем скетче. Один из способов — использовать delay(), но в большинстве случаев это считается неэффективным, так как вы в основном заняты ожиданием во время выполнения delay(). Вы не сможете сделать ничего другого в будущем в течение этого промежутка времени (если вы хотите добавить функциональность к своему устройству).

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

Вы можете добиться этого на Arduino с помощью функции millis(), которая возвращает количество миллисекунд с момента последнего включения/сброса. (Обратите внимание, что она переполняется примерно через 50 дней). Для этого есть множество руководств. Вы можете начать с примера BlinkWithoutDelay из Arduino IDE, который прекрасно показывает, как это должно быть закодировано.

Примечание: если вы используете датчик с батареей, то вам может потребоваться ограничить его энергопотребление. Для этого библиотека может установить соответствующие регистры в датчике, чтобы задать скорость передачи данных в датчике (скорость, с которой обновляются данные в датчике). Меньшая скорость снизит потребление энергии. Таким образом, вы можете установить скорость примерно на уровне скорости считывания в вашем скетче.

,