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_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic: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();
}
好了,交叉编译的过程就不讲了,每个板子都不一样,原理知道了,你们就自求多福吧。哈哈哈哈!!!
下课 吃饭!!!!!