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

时间:2015-12-09 01:15:39

标签: c++ loops opencv raspberry-pi wiringpi

美好的一天,

我正在尝试创建一个程序,从Sensors获取方向数据,然后在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;
}

1 个答案:

答案 0 :(得分:1)

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

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