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

How to stop loop using character input without pausing loop

本文关键字:循环 字符输入 情况下 暂停      更新时间:2023-10-16

你好,

我正试图创建一个程序,从传感器获得方位数据,然后在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;
}

您需要一种查询键盘当前状态的方法,而C++本身并没有提供这种方法。在过去,我曾使用SDL来做这件事。我喜欢SDL,因为它本质上很简单,而且完全是用C编写的。SDL wiki上有一个例子演示了检测键盘状态,可以检测按钮是否被按下。

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