【问题标题】:How to "fake" multitasking on an 8-bit processor?如何在 8 位处理器上“伪造”多任务处理?
【发布时间】:2011-06-27 08:36:18
【问题描述】:

我的机器人中有一个带有 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 的频率打开/关闭压电?

【问题讨论】:

    标签: arduino multitasking


    【解决方案1】:

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

    【讨论】:

    • 嗯...问题是电机屏蔽同时使用了两个定时器中断。
    • 然后找一个外部固定频率的蜂鸣器,当给出简单的ON信号时会发出声音。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2013-12-26
        • 2015-12-29
        • 1970-01-01
        • 2010-09-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多