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

标签 c++ loops opencv raspberry-pi wiringpi

<分区>

你好,

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

最佳答案

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

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

关于c++ - 如何在不暂停循环的情况下使用字符输入停止循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34169109/

相关文章:

C++ 按值返回对象

c++ - 使用 cURL/libcurl 上传到 Amazon S3

c - 求数组中的计数和

java - 在java中搜索没有循环的arraylist

c++ - CascadeClassifier.load() 仅在发布时出错

c++ - 了解 Negamax 的约束

c++ - 标准文本文件是否以 NULL 结尾?

python "TypeError: ' numpy.float6 4' object cannot be interpreted as an integer"

python - 如何使用 OpenCV 和 Python 录制视频?

algorithm - 二维 map 平移计算