我正在研究一个从不同传感器读取数据的arduino项目。我取值并将它们存储在一个数组中。问题是我想以不同的速率更新传感器值。例如,我不是每250毫秒更新一个,而是每50毫秒更新一个。但我希望它能在传感器更新之间运行。我能想到让它完成工作的唯一方法是延迟,但这会阻止循环。
答案 0 :(得分:2)
您可以使用millis()函数,并为要读取的每个传感器设置间隔。看看Arduino网站上的Blink Without Delay示例
答案 1 :(得分:0)
如果要检查一堆传感器,可以使用Metro library来节省一些编码。与BRM的答案相同的一般概念。您也可以使用计时器中断。有关有关计时器中断的大量文章链接的信息,请参阅我的Move now, don’t delay()博客文章。
答案 2 :(得分: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>();
}
只要没有任何“阻塞”循环内容,这将有效。