如何以不同的速率更新传感器值

时间:2012-07-20 23:18:23

标签: arduino

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

3 个答案:

答案 0 :(得分:2)

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

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

答案 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>();  
}

只要没有任何“阻塞”循环内容,这将有效。