[英]how to create an interrupt or return value for servo motor?
从 Arduino tuts 那里学习是令人沮丧的一天。
我正在设置伺服电机。 我解决了为什么我无法让它接收数据的问题,现在我通过串行端口读取并转向适当的角度。 但是现在似乎每次循环时它都会尝试将其值重置为 0 度。 我没有将变量分配为 0,while 循环应该在等待用户输入时充当中断。 所以我不明白为什么要这样做。
我还尝试返回值pos
以防止在每个循环期间更改/重置值,但不断收到编译错误。 有人说pos
返回void
。 然后我在尝试将int pos
声明为循环中的方法并将其余代码嵌套在 int 方法中时得到了另一个。
还有一个有趣的旁注:当您在 IDE 中启动串行端口窗口时,尽管没有输入,它仍会少量旋转电机。 输入给定的输入后,它会达到这些度数,然后如前所述重置。
代码:
#include <Servo.h> //Including the Servo code library
int servoPin = 6;
int servoDelay = 25;
int pos;
Servo myPointer; // Create a Servo object called myPointer
void setup() {
Serial.begin(9600);
//pinMode (servoPin, OUTPUT);
myPointer.attach(servoPin);
Serial.println("Hello");
}
void loop() {
Serial.println ("Where would you like the servo to point?");
while (Serial.available()==0){
}
pos = Serial.parseInt();
Serial.println (pos);
myPointer.write(pos);
}
伺服正在运行 Arduino 上的 5V 电源并接收指令正常。 它在通过 void setup() 运行时不会重置位置,因此这一定是导致此问题的循环。 我只是不知道为什么或如何解决它。
在开始解析消息之前,您已确保接收到整个消息。 在使用前将Serial.setTimeout()
(默认为 1s)的字符间隔设置为更大的值:
Serial.setTimeout(2000);
while (Serial.available() == 0) {}
duration = Serial.parseInt();
或者在Serial.available()
和Serial.parseInt()
之间添加延迟,如果上述方法不能解决您的所有问题。
while (Serial.available() == 0) {}
delay(4000);
duration = Serial.parseInt();
Serial.available()
会落在收到的第一个字符上。 所以:
其他字符如\\n
或\\r
也可能存在触发解析,但没有合理的数据。 如果Serial.parseInt()
无法转换数字,则返回 0。 所以:
\\n
或\\r
。Serial.flush()
解析清空接收缓冲区以去除任何剩余的\\n
或\\r
字符后。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.