0

由于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;
}
4

1 回答 1

0

连续旋转伺服没有位置控制。除非您有一些传感器可以告诉您伺服旋转了多远,否则无法将其停止在正好 45 度。如果您观察它的旋转速度,那么您可以通过将其打开适当的时间来估计 45 度。但即便如此,它也会慢慢变得越来越远。如果您想要位置控制,那么您需要一个提供位置反馈的伺服系统,或者您需要一个步进电机,您可以在其中控制它移动的距离。

于 2019-08-20T13:29:52.777 回答