我很确定这里有一个愚蠢的错误,但我担心我不能为我的生活做出努力!
获得错误的简单测试程序:
#include <Servo.h>
Servo myservo;
int testPIN = 13;
int inputPIN = 5;
void setup()
{
myservo.attach(8);
pinMode(testPIN, OUTPUT);
pinMode(inputPIN, INPUT);
}
void loop()
{
if (digitalRead(inputPIN) == HIGH)
{
digitalWrite(testPIN, HIGH);
myservo.write(90);
}
else
{
digitalWrite(testPIN, LOW);
myservo.write(0);
}
}
arduino扫描示例(http://arduino.cc/en/Tutorial/Sweep)有效,因此我对电子设备的工作非常有信心。
testPIN也按预期开启和关闭,因此if语句按预期工作。
欢迎任何想法/建议!
编辑 - 抱歉错误是伺服完全没有移动
编辑2 - 这里发生了一些奇怪的事情。如果我将扫描循环复制/粘贴到if子句中,则伺服会按预期进行反应(即输入=高电平使伺服运行一个扫描循环,它不会突破,直到达到预期的结束)。我的直接想法是需要延迟,但无论它们有多长或在if / else子句中添加它们,它们似乎没有任何区别。
答案 0 :(得分:0)
我不知道你有哪个arduino板,但是在arduino uno上,我很确定引脚8不是 PWM 输出。而且你不能在非PWM输出上运行伺服。
请参阅Uno板的这张图片,注意引脚8上没有波形(端口支持PWM的指示):
答案 1 :(得分:0)
您是否尝试过使用SoftwareServo.h?此示例看起来像您要完成的任务:http://playground.arduino.cc/ComponentLib/servo
答案 2 :(得分:0)
您要链接的扫描程序使用引脚9,它是uno上的PWM。您的代码使用的是引脚8,它不是PWM输出。将伺服切换到引脚9并将代码中的连接更改为引脚9,并且假设这是您唯一的问题,您的代码应该可以正常工作。
答案 3 :(得分:0)
正如评论中所建议的那样,我刚刚编写了一个能够缓慢移动伺服的功能。不是一个优雅的解决方案,但伺服响应时间不是问题所以它可以解决问题。
感谢所有的帮助和建议,感谢@ praks411的包装函数。