2

我正在开发一个从不同传感器读取数据的 arduino 项目。我取值并将它们存储在一个数组中。问题是我想以不同的速率更新传感器值。例如,我不想每 250 毫秒更新一次,而是每 50 毫秒更新一次。但我希望它在传感器更新之间运行的循环。我能想到让它工作的唯一方法是延迟,但这会停止循环。

4

3 回答 3

2

您可以使用为每个要读取的传感器设置间隔的 millis() 函数。查看 Arduino 网站上的 Blink without Delay 示例

http://arduino.cc/en/Tutorial/BlinkWithoutDelay

于 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 回答