如何在不暂停循环的情况下使用字符输入停止循环

3

你好,

我正在尝试创建一个程序,从传感器获取方向数据,然后使用PID控制算法创建相应的PWM信号。我希望能够通过按下回车键来停止程序。我尝试使用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;
}

我已经找到了答案,waitkey需要打开一个虚拟窗口才能接受键盘输入。 - user123456098
1个回答

1
你需要一种查询键盘当前状态的方法,C++本身不提供此功能。过去我曾使用SDL来实现这个功能。我喜欢SDL,因为它的性质很简单,并且完全由C编写。在SDL维基上有一个示例,演示了检测键盘状态,允许您检测按钮是否被按下。
编辑:SDL可以安装到Raspbian Pi上。我在这里找到了一个示例设置。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接