繁体   English   中英

Arduino伺服没有响应按键

[英]Arduino servo not responding to button press

我敢肯定这里有一个愚蠢的错误,但我恐怕一生都无法解决!

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

#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子句中,则伺服器将按预期方式做出反应(即input = high使伺服器运行一个扫描循环,直到达到预期的结束,它才会中断)。 我立即想到的是需要延迟,但是无论延迟多久或在if / else子句中添加到何处,延迟似乎都没有影响。

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

请参见Uno板的此图像,并注意在引脚8上没有波浪号(表示端口支持PWM):

Arduino Mega2560开发板

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

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

如评论中所建议,我刚刚编写了一个使伺服器缓慢移动的函数。 这不是一个很好的解决方案,但是伺服响应时间不是问题,因此可以解决问题。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM