2

我很确定这里有一个愚蠢的错误,但恐怕我这辈子都无法解决!

得到错误的简单测试程序:

#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

4 回答 4

0

您是否尝试过使用 SoftwareServo.h?这个例子看起来像你想要完成的:http: //playground.arduino.cc/ComponentLib/servo

于 2013-05-13T15:37:06.850 回答
0

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

于 2013-05-13T16:36:47.413 回答
0

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

感谢所有帮助和建议,并感谢 @praks411 为包装函数工作。

于 2013-05-14T19:50:54.277 回答
0

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

查看 Uno 板的这张图片,并注意引脚 8 上没有波浪号(表示端口支持 PWM):

Arduino Mega2560 板

于 2013-05-13T14:47:32.130 回答