如何为伺服电机创建中断或返回值?
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电源,并接收指令OK。在运行 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。所以:
- 进行 1 到 360 度的范围检查以抓住这些,而不会损失太大的转弯范围。
- 检查您的终端是否附加
n
或r
。 - 解析清空后,使用
Serial.flush()
接收缓冲区以删除任何剩余的n
或r
字符。
相关文章:
- 从python中调用C++函数并获取返回值
- 为什么模板类中的对象不能返回值
- 返回值优化:显式移动还是隐式
- lock_guard是否保护返回值
- 调用CreateProcess()并获取字符串的返回值
- 如何使 windows 命令提示符在C++可执行文件上显示返回值?
- 编译器警告:执行到达值返回函数的末尾而不返回值
- 查找 GCD:并非所有控制路径都返回值
- 在 Arduino 上使用 sscanf 会导致与 const char * 不匹配,并且返回值始终相同,尽管输入值不同
- 将返回值存储在函数指针数组的指针中是如何工作的?
- 如何从 std::thread 返回值
- 将返回值从 exe 传递到 bat,并将其传递给 C# 中的进程
- 方法错误"not all control paths return a value"和方法不返回值
- 如何读取 C++ SAFEARRAY**,该 SAFEARRAY** 是 COM 互操作的结果,其中 C# 返回值为
- 对fread的返回值感到困惑
- 程序不向函数返回值
- 如何在另一个函数中使用返回值作为参数?
- 如何使用 uint64_t 键类型从 std::map<int, std::string> 返回值?
- 使用 std::p air 进行返回值优化
- 如何为伺服电机创建中断或返回值?