检测Qt5中GPIO引脚的变化
Detecting GPIO pin change in Qt5
我对树莓派还是个新手。
我的问题的实质如下:
我有一个GPIO引脚的变化,必须被监视(连续轮询),看看它是否改变。如果它改变了,我必须使用Loader在我的Qt5项目中加载一个新的QML文件。我知道如何做装载机部分,考虑到它相当简单。我需要一种方法来轮询GPIO引脚并被通知更改。
我读到QSocketNotifier类可能有帮助。但老实说,我不知道该怎么做。
对找出如何做到这一点提供的任何帮助是赞赏的。谢谢你:)
编辑:我正在为基于树莓派的系统构建一种主菜单,用于在GUI上选择不同的选项,运行在Debian上。它就像一个机顶盒。与屏幕上基于GUI的按钮等效,它应该能够从连接到GPIO引脚的外部按钮获取基于硬件的中断,从而导致加载新页面/开始新活动。
如果我理解正确的话,代码的c++部分必须捕获这个引脚更改,并将其传递给QML部分。我需要能够做到这一点
你对环境和其他需要做的事情只字未提。如果没有其他任务也没有o/s,也许这就是你想要的?:
int last_state = -1; // impossible state so change is noticed the first time
for (;;) // do forever
{
int state = get_gpio (THE_EVENT);
if (state == last_state)
{
sleep (100);
continue;
}
do_loader_stuff();
last_state = state;
}
可以将引脚配置为中断驱动。它的工作方式是,在您执行配置之后,您现在可以在表示引脚的文件上执行select()
,并且当引脚改变状态时,select()
将返回。
下面是sysfs gpio接口的文档:https://www.kernel.org/doc/Documentation/gpio/sysfs.txt
下面是引脚19的设置:
QFile exportFile("/sys/class/gpio/gpio19/export");
exportFile.open(QIODevice::WriteOnly);
exportFile.write("19");
QFile directionFile("/sys/class/gpio/gpio19/direction");
directionFile.open(QIODevice::WriteOnly);
directionFile.write("in");
QFile edgeFile("/sys/class/gpio/gpio19/edge");
edgeFile.open(QIODevice::WriteOnly);
edgeFile.write("body");
现在,不用直接使用select()
,可以使用QSocketNotifier
。
QFile file("/sys/class/gpio/gpio19/value");
QSocketNotifier notifier(file.handle(), QSocketNotifier::Read);
connect(¬ifier, &QSocketNotifier::activated, this, &MyClass::interruptFired);
相关文章:
- 如何在 setup() 函数中使用数字引脚转动电机?
- 如何获取引脚 4 的值,以便也发送到从站并使用 I2C 显示?
- 直接显示 - 无法使用设置模式设置静止引脚
- 如何从 C 文件将引脚排列与 esp8266 一起使用?
- 如何在嵌入式平台中管理不同引脚输出板的代码,以实现更好的HAL管理
- Arduino Nano - 为什么我的引脚表现得如此?
- 使用硬件 RX 引脚作为 arduino 的中断引脚
- C++ 编译时检查微控制器引脚是否已从其他源文件初始化
- OneWire arduino 库,具有后期引脚定义
- 英特尔引脚:如何生成对象转储ish代码
- 如何从单独的PC控制Raspberry Pi的GPIO引脚
- 如何在Beanglebone黑色内核上启用RTS和CTS引脚4.1.15-Ti-RT-R43
- 英特尔引脚:检测运行过程
- 尝试使用引脚工具从堆栈中打印寄存器的值
- 如何为多个模拟引脚编写功能?(阿杜伊诺)
- QT 中的蓝牙 UUID 和引脚请求
- 使用"英特尔引脚"时跟踪不匹配的CALL和RET指令数
- 引脚类似工具,用于编译时注入检测代码
- C++和引脚工具 - IF语句非常奇怪的双变量问题
- 检测Qt5中GPIO引脚的变化