如何在8位处理器上“伪造”多任务处理?

时间:2011-06-12 00:01:29

标签: arduino multitasking

我有一个带有Adafruit Motor Shield的Arduino作为我机器人的一部分。我想在压电元件上播放音调的同时运行电机。

问题是我不太清楚如何在我的代码中伪造/模拟多任务处理。我试过这样的事情:

void goForward(int duration) {

    for (int i; i<duration; i++) {
        tl.run(FORWARD);
        tr.run(BACKWARD);
        bl.run(FORWARD);
        br.run(BACKWARD);
        counter++;

        if (counter%4==0) {
            piezo != piezo;
        }

        delay(1);
    }
}

这会运行电机,但它不会在我的压电元件上产生音调。什么是更好的编程方式,以便在电机命令运行时以440 Hz的频率打开/关闭压电?

3 个答案:

答案 0 :(得分:3)

我不知道Arduino板,但大多数微控制器都有一些定时器中断。你试过设置这样的计时器吗?在定时器中断处理程序中,您可以启用/禁用压电元件,而主循环可用于控制电机。

答案 1 :(得分:0)

普通Arduino板只有3个定时器。这将“多任务”功能限制为3“线程”。 Arduino Mega有16个计时器。换句话说,Arduino Mega可以成为您的解决方案。否?

答案 2 :(得分:0)

创建调度程序以创建并行任务,并为您的电机使用两个定时器,如果您有第三个定时器,则将其用于蜂鸣器。