Qt控制开发板的LED
使用开发板的IO接口进行控制是嵌入式中非常重要的一点,就像冯诺依曼原理说的一样,一个计算机最起码要有输入输出吧,我们有了信息的接收和处理,那我们就要有输出。
我们在开发板上一般都是使用开发板的GPIO接口,那么我们今天就来学学如何在Ubuntu上来编写代码后在开发板上实现控制LED。
UI界面介绍
我们设计简单一点
我们要使用信号和槽来使用按钮来控制灯的亮灭,有两种状态,那我们就要是哟个bool类型的信号
1.
2.
编写代码
我们在Ubuntu上是无法直接通过命令来控制开发板上的,我们一般是通过写文件的方式来控制的,这时候就要用到开发板的用户手册了。
它上面写明了设备树,还有驱动的文件地址等等。例如(龙芯2k1000):
注意:部分开发板会在出场的时候就写好这个驱动,比如说,正点原子的6u开发板会有系统运行的呼吸灯,如果有的话,要设置。设置方法在代码中有注释需要的看!!
好,讲完了原理我们来上代码!!!
我们说控制IO接口其实就是通过文件写驱动状态,那我们就先要读写文件
.h文件的编写
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include<QFile>//添加QFile头文件
QT_BEGIN_NAMESPACE
namespace Ui {
class Widget;
}
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
private slots:
void on_pushButton_clicked(bool checked);
private:
Ui::Widget *ui;
QFile file;//声名
};
#endif // WIDGET_H
.cpp文件编写
#include "widget.h"
#include "ui_widget.h"
#include"QMessageBox"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
//指定文件
file.setFileName("/sys/class/leds/led1/brightness");
//这里就是如果你的那个灯有绑定的驱动,使用这命令来将这个驱动设置位NONE,要不然你写进去也没用
system("echo none > /sys/class/leds/led1/brightness");
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_pushButton_clicked(bool checked)
{
//检查LED是否存在
if(!file.exists()){
QMessageBox::about(this,"错误","led不存在");
}
//将文件设置为只写状态,因为我们不读它
if(file.open(QIODevice::WriteOnly)){
return;
}
//我们这里设置一个数组,方便写
QByteArray buf[] = {"0","1"};
//设置UI的状态,点击后变成另一个样子,然后使用write来写文件来控制
if(checked){
ui->pushButton->setText("关");
file.write(buf[0]);
}else {
ui->pushButton->setText("开");
file.write(buf[1]);
}
//要关闭文件!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
file.close();
}
好了,交叉编译的过程就不讲了,每个板子都不一样,原理知道了,你们就自求多福吧。哈哈哈哈!!!
下课 吃饭!!!!!