2013-05-13 138 views
2

我很确定这里有一个愚蠢的错误,但我恐怕我不能为我的生活工作了!Arduino伺服没有响应按钮按

简单的测试程序,它会取得错误:

#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语句按预期工作。

欢迎任何意见/建议!

编辑 - 对不起误差伺服完全不

EDIT 2移动 - 这是一个有点奇怪的是怎么回事。如果我将扫描循环复制/粘贴到if子句中,则伺服器按预期作出反应(即,输入=高电平使得伺服运行一个扫描循环,直到达到预期结束时才扫描循环)。我的直接想法是需要延迟,但无论他们多长时间或在if/else子句中添加它们的位置,它们似乎都没有区别。

+0

什么是错误? – Mushy 2013-05-13 14:25:44

+0

对不起!往上看。谢谢 – user2056166 2013-05-13 14:27:12

+0

在现场你已经提到伺服器在第9针,在你的代码中它连接到第8针......只是一个疯狂的猜测。 – Archie 2013-05-13 14:31:55

回答

0

我不知道你有哪个arduino板,但是在arduino uno上,我很确定引脚8不是PWM输出。而且您无法在非PWM输出上运行伺服。

见欧诺板的这个形象,并注意没有波浪(一个端口支持PWM指示)引脚8:

Arduino Mega2560 board

+0

谢谢,但伺服器与“扫描”程序正常工作,只是为了确保我只是在第7针上尝试了它,并更改了代码,没有运气。 – user2056166 2013-05-13 14:50:24

+0

@unwind感谢您的编辑。 – Bastien 2013-05-13 14:52:34

+0

啊,我明白你的意思了 - 我使用的是Arduino Mega2560,在任何引脚上都没有tildas。 – user2056166 2013-05-13 14:54:13

0

你链接到的扫描程序是使用引脚9,这是一个uno上的PWM。您的代码使用引脚8,而不是PWM输出。将伺服器切换到第9针,并将代码中的附件更改为第9针,假设这是您唯一的问题,那么您的代码应该可以工作。

+0

你是什么意思,你不能控制引脚8上的伺服? – AGS 2013-05-14 11:40:35

+0

这是一些Arduino板的问题,如上所述。 – user2056166 2013-05-14 19:52:39

0

正如评论中所建议的,我刚写了一个缓慢移动伺服的功能。不是一个优雅的解决方案,但伺服响应时间不是问题,所以它的伎俩。

感谢您的所有帮助和建议,并感谢@ praks411的包装功能。