Arduino伺服没有响应按钮按下

时间:2013-05-13 14:23:23

标签: c++ 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语句按预期工作。

欢迎任何想法/建议!

编辑 - 抱歉错误是伺服完全没有移动

编辑2 - 这里发生了一些奇怪的事情。如果我将扫描循环复制/粘贴到if子句中,则伺服会按预期进行反应(即输入=高电平使伺服运行一个扫描循环,它不会突破,直到达到预期的结束)。我的直接想法是需要延迟,但无论它们有多长或在if / else子句中添加它们,它们似乎没有任何区别。

4 个答案:

答案 0 :(得分:0)

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

请参阅Uno板的这张图片,注意引脚8上没有波形(端口支持PWM的指示):

Arduino Mega2560 board

答案 1 :(得分:0)

您是否尝试过使用SoftwareServo.h?此示例看起来像您要完成的任务:http://playground.arduino.cc/ComponentLib/servo

答案 2 :(得分:0)

您要链接的扫描程序使用引脚9,它是uno上的PWM。您的代码使用的是引脚8,它不是PWM输出。将伺服切换到引脚9并将代码中的连接更改为引脚9,并且假设这是您唯一的问题,您的代码应该可以正常工作。

答案 3 :(得分:0)

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

感谢所有的帮助和建议,感谢@ praks411的包装函数。