imx6ull开发板之qt应用编程读取光照,距离数据。
- 一.效果展示
- 一.搭建QT环境
- 二.Qt编程
- 2.1 mainwindows.h文件
- 2.2 mainwindow.cpp
- 三.在Linux平台下交叉编译
- 3.1 将生成文件拷贝到linux下
- 3.2 在linux平台下编译程序
- 四.开发板运行编译好的qt程序
一.效果展示
一.搭建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_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();public slots:void handleTimeout();//定时器处理函数void light_Clicked(); //按钮点击函数
private:Ui::MainWindow *ui;void ap3216c_init(void); //初始化ap3216void 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指令后的字符串结果保存下来//去除0xQString 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程序,如图: