基于(Linux)IM6ULL开发板的车载终端系统(Qt开发)

万恶的蘑菇 2024-08-31 10:37:09 阅读 85

基于(Linux)IM6ULL开发板的车载终端系统(Qt开发)

项目介绍生活天气相册钟表

应用视频音乐地图

工具wifi灯倒车影像文件夹设置指南针

注意下载连接

项目介绍

这个项目是基于正点原子阿尔法I.M6ULL开发板编写的,本项目分为3个大模块(生活、应用、工具)。硬件需求:正点原子阿尔法I.M6ULL开发板、usbwifi模块(购买板自带)、RGB屏(建议7寸)、OV5640摄像头。相信大家一定关注一件事那就是开源,没错本项目开源下载连接在文章底部。本人感觉,作为毕业课设难度应该够。

生活

在这里插入图片描述

其中有小模块,天气、相册、钟表、日历(Qt自带控件)

life.h

<code>#ifndef LIFE_H

#define LIFE_H

#include <QWidget>

#include <QLabel>

#include <QTimer>

#include <QDebug>

#include <weather/weather.h>

#include <photoViem/photoviem.h>

#include <date_biao/date_biao.h>

namespace Ui {

class Life;

}

class Life : public QWidget

{

Q_OBJECT

public:

explicit Life(QWidget *parent = nullptr,QWidget *parent1 = nullptr);

~Life();

void weather_diaplay(bool); // 显示天气界面

void wifi_judge(bool); // 获取wifi是否可以使用

void hide_all();

private slots:

void on_pushButton_photo_clicked();

signals:

void hide_show_life();

private:

Ui::Life *ui;

QLabel *photoLabel;

QTimer *photoTimer;

QWidget *life_ui;

Date_biao *date_biao;

PhotoViem *photoViem;

Weather *weather;

bool wifi_judge_;

};

#endif // LIFE_H

life.cpp

#include "life.h"

#include "ui_life.h"

Life::Life(QWidget *parent,QWidget *parent1) :

QWidget(parent),

ui(new Ui::Life)

{

ui->;setupUi(this);

// 相册label下的按键

ui->pushButton_photo->setFixedSize(ui->widget_photo->size());

ui->pushButton_photo->setFlat(true);

ui->pushButton_photo->raise();

life_ui = new QWidget(parent1);

life_ui->setFixedSize(1024,600);

life_ui->hide();

// 相册

photoViem = new PhotoViem(life_ui);

photoViem->hide();

photoLabel = new QLabel(ui->widget_photo);

// 钟表

date_biao = new Date_biao(ui->widget_meter);

date_biao->move(ui->widget_meter->width()/2-this->height()/4,-15);

date_biao->resize(this->width()/3,this->height()*2/3);//ui->widget_meter->width(), ui->widget_meter->height()

date_biao->raise();

// 天气

weather = new Weather(life_ui);

weather->hide();

ui->widget_meter->raise(); // 最上层

connect(weather,&Weather::pixmap_data,[=](QPixmap pixm){

pixm = pixm.scaled(ui->widget_meter->width(), ui->widget_meter->height(), Qt::KeepAspectRatio, Qt::SmoothTransformation);

ui->label_watcher->setPixmap(pixm);

ui->label_watcher->lower();

});

connect(photoViem,&PhotoViem::at_pixmap,[=](QPixmap pix){

photoLabel->setFixedSize(ui->widget_photo->size());

photoLabel->setPixmap(pix.scaled(ui->widget_photo->width(), ui->widget_photo->height(), Qt::KeepAspectRatio, Qt::SmoothTransformation));

photoLabel->lower();

ui->pushButton_photo->move(0,0);

ui->pushButton_photo->setFixedSize(pix.scaled(ui->widget_photo->width(), ui->widget_photo->height(), Qt::KeepAspectRatio, Qt::SmoothTransformation).size());

//qDebug()<<ui->pushButton_photo->size()<<ui->pushButton_photo->x()<<ui->pushButton_photo->y()<<ui->widget_photo->x();

});

}

Life::~Life()

{

delete ui;

}

void Life::weather_diaplay(bool aaa)

{

if(wifi_judge_)//wifi_judge_

{

if(aaa) // 显示

{

weather->show();

life_ui->show();

emit hide_show_life();

}

else

{

weather->hide();

}

}

else

qDebug()<<"没用检测到网络信号!!!!";

}

void Life::wifi_judge(bool wifiJudge)

{

wifi_judge_ = wifiJudge;

}

void Life::hide_all()

{

photoViem->hide__();

weather->hide();

life_ui->hide();

weather_diaplay(false);

}

void Life::on_pushButton_photo_clicked()

{

//qDebug()<<ui->widget_photo->size()<<photoLabel->width()<<photoLabel->height()<<ui->pushButton_photo->width()<<ui->pushButton_photo->height();

photoViem->show();

life_ui->show();

emit hide_show_life();

}

天气

会获取当前天气显示到钟表模块后,做为背景。应用模块的天气模块是以信号的形式打开该天气模块的ui界面(建议更换一个api)。

weather.h

wforecast.h

wather.cpp

wforecast.cpp

相册

获取相册文件夹的图片,轮流显示,单机ui图片打开相册功能,在功能中双击放大(有点卡需要等待)。

在这里插入图片描述

photoviem.h

pitherbig.h

photoviem.cpp

pitherbig.cpp

钟表

生活模块ui上的大表盘,获取系统时间显示。

data_biao.h

data_biao.cpp

应用

在这里插入图片描述

其中有视频、音乐、天气、地图模块。

use.h

<code>#ifndef USE_H

#define USE_H

#include <QWidget>

#include <QDebug>

#include <myMap/mymap.h>

#include <musicplay/musicplay.h>

#include <video/video.h>

namespace Ui {

class Use;

}

class Use : public QWidget

{

Q_OBJECT

public:

explicit Use(QWidget *parent = nullptr,QWidget *parent1 = nullptr);

~Use();

void useName(bool);

void wifi_judge(bool); // 获取wifi是否可以使用

void hide_all();

private slots:

void on_pushButton_video_clicked();

void on_pushButton_music_clicked();

void on_pushButton_browser_clicked();

void on_pushButton_weather_clicked();

void on_pushButton_map_clicked();

void on_pushButton_radio_clicked();

signals:

void weather_show();

void hide_show_use();

private:

Ui::Use *ui;

MyMap *mymap;

MusicPlay *musicPlay;

Video *video;

QWidget *use_ui;

bool wifi_judge_;

};

#endif // USE_H

use.cpp

#include "use.h"

#include "ui_use.h"

Use::Use(QWidget *parent,QWidget *parent1) :

QWidget(parent),

ui(new Ui::Use)

{

ui->;setupUi(this);

use_ui = new QWidget(parent1);

use_ui->setFixedSize(1024,600);

use_ui->hide();

mymap = new MyMap(use_ui);

mymap->hide();

musicPlay = new MusicPlay(use_ui);

musicPlay->setAttribute(Qt::WA_StyledBackground); // 脱离父类窗口

musicPlay->hide();

video = new Video(use_ui);

video->hide();

}

Use::~Use()

{

delete ui;

}

void Use::useName(bool use_name)

{

if(use_name) // 显示

{

ui->label_browser->show();

ui->label_map->show();

ui->label_music->show();

ui->label_raido->show();

ui->label_video->show();

ui->label_weather->show();

}

else

{

ui->label_browser->hide();

ui->label_map->hide();

ui->label_music->hide();

ui->label_raido->hide();

ui->label_video->hide();

ui->label_weather->hide();

}

}

void Use::wifi_judge(bool wifiJudge)

{

wifi_judge_ = wifiJudge;

}

void Use::hide_all()

{

mymap->hide();

musicPlay->hide();

video->hide();

use_ui->hide();

//use_ui->setStyleSheet("background-color: rgb(0, 0, 0);");

}

void Use::on_pushButton_video_clicked()

{

use_ui->show();

video->show();

emit hide_show_use();

}

void Use::on_pushButton_music_clicked()

{

use_ui->show();

//use_ui->setStyleSheet("background-color: rgb(81, 81, 81);");

musicPlay->show();

emit hide_show_use();

}

void Use::on_pushButton_browser_clicked() //浏览器

{

qDebug()<<"\n暂无“浏览器”功能,作者会努力的!!!";

}

void Use::on_pushButton_weather_clicked()

{

if(wifi_judge_)

emit weather_show();

else

qDebug()<<"没用检测到网络信号!!!";

}

void Use::on_pushButton_map_clicked()

{

if(wifi_judge_)

{

use_ui->show();

mymap->show();

emit hide_show_use();

}

else

qDebug()<<"没用检测到网络信号!!!";

}

void Use::on_pushButton_radio_clicked()

{

qDebug()<<"\n暂无“收音机”功能,作者会努力的!!!";

}

视频

在这里插入图片描述

video.h

video.cpp

音乐

在这里插入图片描述

musicplay.h

lyic.h

musicplay.cpp

lyic.cpp

地图

在这里插入图片描述

mymap.h

map.h

longitudelatitude.h

mymap.cpp

map.cpp

longitudelatitude.cpp

工具

在这里插入图片描述

其中有wifi、灯、倒车影像、文件夹、设置、使用介绍、指南针模块。

tool.h

<code>#ifndef TOOL_H

#define TOOL_H

#include <QWidget>

#include <QTimer>

#include <QTextEdit>

#include <QLabel>

#include <QDebug>

#include <compass/compass.h>

#include <key/ap3216c.h>

#include <key/icm20608.h>

#include <key/led.h>

#include <folder/folder.h>

#include <wifi/wifi.h>

#include <set_arm/set_arm.h>

//#include <camera/camera.h>

namespace Ui {

class Tool;

}

class Tool : public QWidget

{

Q_OBJECT

public:

explicit Tool(QWidget *parent = nullptr,QWidget *parent1 = nullptr);

~Tool();

void useName(bool);

void hide_all();

private slots:

void on_pushButton_folder_clicked();

void on_pushButton_light_clicked();

void on_pushButton_backcar_clicked();

void on_pushButton_wifi_clicked();

void on_pushButton_instructions_clicked();

void on_pushButton_set_clicked();

signals:

void wifi_judge(bool);

void hide_show_tool();

void bizi_path(QString);

void use_name(bool);

private:

Ui::Tool *ui;

Folder *folder;

//Camera *camera;

QWidget *tool_ui;

QTextEdit *textEdit_instructions;

Compass *compss;

QLabel *compss_label;

Set_arm *set_arm;

#ifdef Q_OS_LINUX

Led *led;

ICM20608 *icm20608;

Ap3216c *ap3216c;

Wifi *wifi;

bool led_state;

int led_big;

#endif

QString instructions_QString = "\n#####使用说明#####\n\n"

"#欢迎大家使用,借鉴。本程序借鉴了很多网上大佬的开源资料,勿喷。\n"

"\n#程序是按照正点原子IMX6U阿尔法开发板来编写的,其中几个模块功能需要"

"板载硬件才可以实现。\n"

"\n#WiFi功能模块,是需要板子购买时赠送的wifiUSB模块的,wifi程序是直接"

"调用板载驱动,进行连接wifi和查看周围wifi。\n"

"\n#地图功能模块是(天地图)连接api,获取地图、经纬度数据,地名搜索经纬"

"度不太准确,导致地图图片不太准确,搜索地标性建筑还是可以的,建议"

"把api改为高德或者百度的应该会好一点。\n"

"\n#指南针是根据板载硬件ICM20608六轴传感器其中的x、y轴来计算的,指南"

"针不准(作者较为废物,建议修改一下)。\n"

"\n#倒车影像功能模块,使用OpenCV来实现的。\n"

"\n#天气功能模块,连接api获取天气,作者这个api比较捞(次数少),建议更"

"换,钟表后面显示当前天气状况,天气应用有两个界面,界面1,当天的天气情"

"况,单机屏幕切换界面2,未来5天的天气情况。\n"

"\n#键盘输入中文功能模块,是应用开源大佬\n"

"https://github.com/justdoit-mqr/softkeyboard。\n"

"\n#浏览器功能和收音机功能,暂时还没有开发,各位大佬可以自行研究。\n\n"

"\n#####建议#####\n\n"

"#有一些默认的路径可以自己根据自己电脑进行更改,如:默认连接的wifi,文件"

"夹功能模块下windows下的路径等。\n"

"\n#键盘功能开启了两次,可以自己优化为一次。\n"

"\n#语音识别功能模块(voice)是根据百度语音识别来实现的,因为有时不太"

"准确,本程序没有使用,可以自行添加该功能。也可以购买模块编写驱动来实现语音功能。\n";

};

#endif // TOOL_H

tool.cpp

#include "tool.h"

#include "ui_tool.h"

#include <math.h>

Tool::Tool(QWidget *parent,QWidget *parent1) :

QWidget(parent),

ui(new Ui::Tool)

{

ui->;setupUi(this);

tool_ui = new QWidget(parent1);

tool_ui->setFixedSize(1024,600);

tool_ui->hide();

// 使用介绍

textEdit_instructions = new QTextEdit(tool_ui);

textEdit_instructions->setReadOnly(true); // 只读

textEdit_instructions->setStyleSheet("font: 13pt \"宋体\";");

textEdit_instructions->resize(tool_ui->size());

textEdit_instructions->append(instructions_QString);

textEdit_instructions->hide();

// 指南针

compss = new Compass(ui->widget_compass);

compss_label = new QLabel(this);

compss_label->resize(140,40);

compss_label->move(this->width()*2/3+6,this->height()*7/8);

compss_label->setAlignment(Qt::AlignCenter);

compss_label->setStyleSheet("font: 28pt \"宋体\";");

compss_label->setText("指南针");

// 文件夹

folder = new Folder(tool_ui);

folder->hide();

// 设置

set_arm = new Set_arm(tool_ui);

set_arm->hide();

// 倒车影像

//camera = new Camera(tool_ui);

//camera->hide();

#ifdef Q_OS_LINUX

// 灯

led = new Led(this);

led_state = false;

// 六轴传感器

icm20608 = new ICM20608(this);

// 光、距离、红外传感器i

ap3216c = new Ap3216c(this);

// WFi

wifi = new Wifi(tool_ui); // 会默认连接wifi

wifi->hide();

connect(wifi,&Wifi::wifi_judge,[=](bool judge){ // 获取wifi连接是否成功

emit wifi_judge(judge);

});

connect(ap3216c,&Ap3216c::ap3216cDataChanged,[=]{

if(ap3216c->alsData().toInt() <= 5 || ap3216c->alsData().toInt() >= 700)

{

if(led_big <= 0)

{

on_pushButton_light_clicked();

led_big=1;

}

}

});

connect(icm20608,&ICM20608::icm20608DataChanged,[=]{

// 温度

if(icm20608->tempData()>= 36)

{

ui->label_temp_number->setStyleSheet("color:red;");

}

else

{

ui->label_temp_number->setStyleSheet("color:black;");

}

ui->label_temp_number->setText(icm20608->tempData() + "℃");

// 指南针数据改变

float gxdata = icm20608->gxData().toFloat() * 10;

float gydata = icm20608->gyData().toFloat() * 10;

if(gxdata < 0)

{

if(gydata < 0)

compss->set_direction(180+sqrt((-gxdata)*(-gxdata)+(-gydata)*(-gydata)));

else

compss->set_direction(270+sqrt((-gxdata)*(-gxdata)+(-gydata)*(-gydata)));

}else{

if(gydata < 0)

compss->set_direction(90+sqrt((-gxdata)*(-gxdata)+(-gydata)*(-gydata)));

else

compss->set_direction(sqrt((-gxdata)*(-gxdata)+(-gydata)*(-gydata)));

}

});

#endif

connect(set_arm,&Set_arm::bizi_path,[this](QString bizi_path_){

emit bizi_path(bizi_path_);

});

connect(set_arm,&Set_arm::use_name,[this](bool use_name_){

emit use_name(use_name_);

});

//connect(camera,&Camera::close_camera,this,&Tool::hide_all);

}

Tool::~Tool()

{

delete ui;

}

void Tool::useName(bool use_name_xianshi)// 名字显示?

{

if(use_name_xianshi) // 显示

{

ui->label_backcar->show();

ui->label_folder->show();

ui->label_instructions->show();

ui->label_light->show();

ui->label_set->show();

ui->label_wifi->show();

compss_label->show();

}

else

{

ui->label_backcar->hide();

ui->label_folder->hide();

ui->label_instructions->hide();

ui->label_light->hide();

ui->label_set->hide();

ui->label_wifi->hide();

compss_label->hide();

}

}

void Tool::hide_all() // 关闭

{

textEdit_instructions->hide();

folder->hide();

//camera->close_camera();// 关闭摄像头

//camera->hide();

tool_ui->hide();

set_arm->hide();

#ifdef Q_OS_LINUX

wifi->hide();

#endif

}

void Tool::on_pushButton_folder_clicked()

{

folder->show();

tool_ui->show();

emit hide_show_tool();

}

void Tool::on_pushButton_light_clicked()

{

#ifdef Q_OS_LINUX

if(!led_state)

{

led->on_led_clicked(true);

ui->pushButton_light->setStyleSheet("border-image: url(:/car_terminall/light1.png);");

led_state = true;

}

else // 关灯

{

led->on_led_clicked(false);

ui->pushButton_light->setStyleSheet("border-image: url(:/car_terminall/light0.png);");

led_state = false;

}

#endif

#ifdef Q_OS_WIN32

qDebug()<<"\nWindow无法启用该模块!!!";

#endif

}

void Tool::on_pushButton_backcar_clicked()

{

//camera->show();

//camera->open_camera();

tool_ui->show();

emit hide_show_tool();

}

void Tool::on_pushButton_wifi_clicked()

{

#ifdef Q_OS_LINUX

wifi->show();

tool_ui->show();

emit hide_show_tool();

#endif

#ifdef Q_OS_WIN32

qDebug()<<"\nWindow无法启用该模块!!!";

#endif

}

void Tool::on_pushButton_instructions_clicked()

{

textEdit_instructions->show();

tool_ui->show();

emit hide_show_tool();

}

void Tool::on_pushButton_set_clicked()

{

set_arm->show();

tool_ui->show();

emit hide_show_tool();

}

wifi

在这里插入图片描述

wifi.h

mima.h

wifi.cpp

mima.cpp

板载资源,按键旁的小灯。

led.h

led.cpp

倒车影像

window可以使用,linux也可以使用,就是烧录不到arm板。

camera.h

camera.cpp

文件夹

在这里插入图片描述

folder.h

folder.cpp

设置

在这里插入图片描述

set_arm.h

set_arm.cpp

指南针

在这里插入图片描述

compass.h

compass.cpp

注意

该程序先连接网络在启动,否则可能打不开打开应用后,按板子黄色按键退出应用。地图不支持双指超作,因为板子不支持,所以没法编写。浏览器和收音机模块,暂无开发。

下载连接

百度网盘:下载

链接:https://pan.baidu.com/s/10HYNU7tbgD5BJQ1SK5Zd9w?pwd=1111

提取码:1111

感谢各位大大的点赞。



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。