3

再会,

我正在尝试创建一个程序,该程序从传感器获取方向数据,然后在 PID 控制算法中使用该数据来创建相应的 PWM 信号。我希望能够通过按 Enter 来停止程序。我尝试使用 opencv 的 waitKey(); 但是它不接受我的键盘输入。我也试过 cin.get(); 但它暂停了我的循环,这会产生问题。一旦四轴飞行器改变方向,我的 pwm 就不会刷新。我尝试研究其他方法,但我无法让它们起作用。这是我使用上述两种方法的代码示例。

使用 cin.get():

using namespace std;

int main(void){

    while(1){
        /* get orientation data */

    /* output corresponding pwm */

    //Press enter to stop loop
        if(cin.get() == '\n'){
            /* Stop Pwm */ 
            break;
        }
    }
    return 0;
}

使用 waitKey();

using namespace std;
using namespace cv;

int main(void){

    while(1){
        /* get orientation data */

        /* output corresponding pwm */

        //Press ESC to stop loop
        int key = waitKey(33){
        if(key == 27){
            /* Stop Pwm */ 
            break;
        }
    }
    return 0;
}
4

1 回答 1

1

您需要一种查询键盘当前状态的方法,而 C++ 本身并不提供这种方法。过去,我曾将SDL用于这件事。我喜欢 SDL,因为它本质上很简单,并且完全用 C 语言编写。SDL wiki 上有一个示例演示了检测键盘状态,它允许您检测按钮是否被按住。

编辑:SDL 可以放在 Raspbian Pi 上。我在这里找到了一个示例设置

于 2015-12-09T01:25:20.553 回答