一.效果展示
一.搭建QT环境
首先你的开发板需要QT的文件系统,这样才能支持qt程序。在这个背景下才能进行下面的操作。如果没有此背景,自行去查找资料,完成此步。注意:我这里使用的是百问网的imx6ull开发板。
二.Qt编程
这里是在windows平台下进行开发的。这里的命令可以参考博主的上一篇文章。
2.1 mainwindows.h文件
#ifndef MAINWINDOW_H #define MAINWINDOW_H #include <string.h> #include <QProcess> #include <QDebug> #include <QString> #include <QMainWindow> #include <QTimer> #include <QPushButton> QT_BEGIN_NAMESPACE namespace Ui { class MainWindow; } QT_END_NAMESPACE class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(QWidget *parent = nullptr); ~MainWindow(); public slots: void handleTimeout();//定时器处理函数 void light_Clicked(); //按钮点击函数 private: Ui::MainWindow *ui; void ap3216c_init(void); //初始化ap3216 void read_light(void); // 读光照 void read_distance(void); //读距离 QTimer *m_pTimer; //定时器 QPushButton *button_light; //按钮 }; #endif // MAINWINDOW_H
2.2 mainwindow.cpp
#include "mainwindow.h" #include "ui_mainwindow.h" #include <stdio.h> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); ap3216c_init();//初始化 m_pTimer=new QTimer(this); //关联槽函数 connect(m_pTimer, SIGNAL(timeout()), this, SLOT(handleTimeout())); connect(button_light,SIGNAL(clicked()),this,SLOT(light_Clicked())); //设置定时时间 m_pTimer->start(1000); //按钮设置 button_light=new QPushButton("开灯",this); button_light->setGeometry(300,200,80,40); } void MainWindow::light_Clicked() { if(button_light->text()=="开灯") { button_light->setText("关灯"); } else if(button_light->text()=="关灯") { button_light->setText("开灯"); } } //1s读一次传感器 void MainWindow::handleTimeout() { read_light(); read_distance(); } MainWindow::~MainWindow() { delete ui; } void MainWindow::read_light() { QProcess p; QByteArray G1; QString cmd="i2cget -f -y 0 0x1e 0xc w"; p.start("bash",QStringList()<<"-c"<<cmd); p.waitForFinished(); //等待Linux指令执行完成 QString result = p.readAllStandardOutput(); //把执行Linux指令后的字符串结果保存下来 QString Data=result.mid(2,4); ui->light->setText(QString::number(Data.toInt(),10)); //G1=Data.toUtf8().toHex(); } void MainWindow::read_distance() { QProcess p; QByteArray G1; QString cmd="i2cget -f -y 0 0x1e 0xe w"; p.start("bash",QStringList()<<"-c"<<cmd); p.waitForFinished(); //等待Linux指令执行完成 QString result = p.readAllStandardOutput(); //把执行Linux指令后的字符串结果保存下来 //去除0x QString Data=result.mid(2,4); ui->distance->setText(QString::number(((Data.toInt()&0x3f00)<<4)|(Data.toInt()&0x000f),10)); } void MainWindow::ap3216c_init(void) { QProcess p; QString Cmd_reset = "i2cset -f -y 0 0x1e 0 0x4"; //复位 QString Cmd_enable ="i2cset -f -y 0 0x1e 0 0x3"; //使能 p.start("bash",QStringList()<<"-c"<<Cmd_reset); p.waitForFinished(); p.start("bash",QStringList()<<"-c"<<Cmd_enable); //执行Linux指令 p.waitForFinished(); }
三.在Linux平台下交叉编译
3.1 将生成文件拷贝到linux下
我们运行程序后会生成2个目录,我们只需要将my_pro拷贝到linux平台下即可
3.2 在linux平台下编译程序
我们在linux下用Qt打开刚才拷贝的文件夹,点击Build即可。
运行之后会生成一个build目录,如图第二个
我们进入此目录后,将my_pro文件拷贝到开发板即可。
四.开发板运行编译好的qt程序
我们首先给此文件具有可执行权限
这步之后直接运行即可,如图
这样开发板就跑起来了我们的qt程序,如图: