button - 如何仅在释放按钮时使连续旋转伺服移动45度?
问题描述
由于millis()函数,我有一个程序每100毫秒更新一次。该程序正在等待一个按钮被按下,当它发生某些事情时。现在,我想知道按钮何时被释放,等待大约半秒钟,然后将连续旋转伺服移动大约 45 度。
我怎么做?附上我的部分代码。
#define UPDATE_MS (100)
#define BTN_PIN (5)
bool btn_state = 1;
bool prev_btn_state = 1;
void loop () {
if (millis() - previous_millis >= UPDATE_MS) {
previous_millis = millis();
btn_state = digitalRead(BTN_PIN);
if (!btn_state) {
//It does somethings - doesn't matter right now...
prev_btn_state = 0;
}
}
if (btn_state != prev_btn_state) {
magazine_servo.write(45);
}
prev_btn_state = btn_state;
}
解决方案
连续旋转伺服没有位置控制。除非您有一些传感器可以告诉您伺服旋转了多远,否则无法将其停止在正好 45 度。如果您观察它的旋转速度,那么您可以通过将其打开适当的时间来估计 45 度。但即便如此,它也会慢慢变得越来越远。如果您想要位置控制,那么您需要一个提供位置反馈的伺服系统,或者您需要一个步进电机,您可以在其中控制它移动的距离。
推荐阅读
- docker - Docker 层的顺序是如何定义的?
- javascript - 我的 discord.js 机器人发送多个 gif 而不是一个。我该如何解决?
- javascript - 嵌套的 Firestore 侦听器以及如何取消订阅已创建的侦听器
- linux - Linux - ffmpeg 3.4.6 与 4.2.1 - 带有 Tee(记录和流)的 bash 脚本在旧版本中运行得很好 - 新版本需要改变什么?
- python - 从 Google Cloud Storage 中提取 JSON,转换为 pandas DF,并写入 Google BigQuery
- applescript - 使用 Applescript 单击 Chrome 网页上的按钮
- javascript - 无法在 React 中调度两个动作,状态没有正确更新
- scala - 为什么我的 sbt 公共项目、测试区没有 circe?
- list - 可迭代 toList() 抛出 - ArgumentError(无效参数(输入):不能为空)
- excel - 为什么 vba 不在工作表中移动形状?