我正在开发一个从不同传感器读取数据的 arduino 项目。我取值并将它们存储在一个数组中。问题是我想以不同的速率更新传感器值。例如,我不想每 250 毫秒更新一次,而是每 50 毫秒更新一次。但我希望它在传感器更新之间运行的循环。我能想到让它工作的唯一方法是延迟,但这会停止循环。
问问题
2575 次
3 回答
2
您可以使用为每个要读取的传感器设置间隔的 millis() 函数。查看 Arduino 网站上的 Blink without Delay 示例
于 2012-07-25T15:08:57.343 回答
0
如果您有一堆传感器要检查,您可以使用Metro 库节省一些编码。与 BRM 的答案相同的一般概念。您也可以使用定时器中断。有关定时器中断文章的链接的信息,请参阅我的立即移动,不要延迟()博客文章。
于 2012-07-25T17:38:33.260 回答
0
如果您不想使用库,则可以这样实现:
typedef void (*command)();
template <unsigned long wait_ms, command c>
void repeat() {
static unsigned long start = millis();
if (millis()-start >= wait_ms) {
start += wait_ms;
c();
}
}
void task1() {
// every 50ms
}
void task2() {
// every 250ms
}
void setup() {
}
void loop() {
repeat< 50, task1>();
repeat<250, task2>();
}
只要循环内没有任何“阻塞”,这将起作用。
于 2013-10-26T19:42:57.833 回答