Arduino - 无阻塞脉冲

时间:2012-10-11 05:59:06

标签: arduino

我正在使用Arduino来控制几个Victor 884's

经过一些研究,我发现你需要发送一些不同持续时间的脉冲才能使它成为现实(我不知道这里有什么正确的术语)。

要控制它,请执行以下操作。

Stop = 1.5 ms on and 0.5 ms off.
Forward Full Power = 2 ms on and 0 ms off
Backward Full Power = 1 ms on and 1 ms off

所以为了让电机停止,我可以使用这样的代码。

void setup() {
    pinMode(13, OUTPUT);
}

void loop() {
    digitalWrite(13, HIGH);
    delayMicroseconds(1500);
    digitalWrite(13, LOW);
    delayMicroseconds(500);
}

问题是,这段代码是阻塞的,所以我不能做任何事情而不会弄乱时间。 解决方案是摆脱延迟声明。

我能够根据BlinkWithoutDelay示例创建一个非阻止版本。

当我尝试控制3-4个Victors时出现问题。我尝试了复制,粘贴,重命名和一些数字固定的方法,但代码很快变得混乱。

所以我的问题是,我应该怎么做?我应该编写一些类来为我处理它(因为我不知道如何用C ++编写类,所以很痛苦)或者我应该考虑使用Arduino的定时器来实现我的目标。

2 个答案:

答案 0 :(得分:0)

您可以同时使用Timer库并创建自己的类来保持清洁。您还可以创建一个包含驱动884s的函数的附加.pde / .ino文件,而不是类。

如果您正在运行Windows,请获取Visual Studio Professional和Arduino插件的副本。它有一个创建新Cpp文件的选项,可以自动为您创建一个类。 http://www.visualmicro.com

当你看到一个工作时,类很容易。另一种方法是创建自己的库来处理884代码,但这更复杂。

编辑:如果您要了解更多C ++,请按照Pawel上面的评论进行操作。 Pawel是正确的中断是最好的,特别是如果使用我在第一次阅读你的请求时错过的microSeconds

答案 1 :(得分:0)

最有可能你可能想了解脉冲宽度调制又称PWM:http://arduino.cc/en/Tutorial/PWM