基于GEC6818的智能火锅点餐系统

本次项目开发环境:gec6818,QT5.14.2,SecureCRT。

所使用的相关技术:c/s架构,STL库,C++封装,标准化代码编写

实现的功能:用户登录页面,食品分区在不同页面,用户点餐页面,用户买单页面,数据整合并发送至后台,后台成功接受数据,返回主页面。

1、gec6818开发板的特点(性能强大):

        a:GEC6818开发平台,核心板采用10层板工艺设计,确保稳定可靠。

        b:该平台搭载三星Cortex-A53系列高性能八核处理器S5P6818,最高主频高达1.4GHz。

        c:开发板留有丰富的外设,支持千兆以太网、板载LVDS接口、MIPI接口、USB接口等。

        d:可应用于嵌入式Linux和Android等操作系统的驱动、应用开发。

        c:搭载7.0英寸LCD屏支持32位真彩色,触摸屏使用电容屏触点多达1,536,000个以上。

2、连接电源,串口和网络接口,通过SecureCRT来设置开发板。

3、编写代码:

        思路:初始化显示屏和触摸屏,生成自定义坐标X轴Y轴,根据触摸坐标发出的信号来响应事件。通过STL库中的正向迭代器使文件中的图片按顺序输出,在通过TCP通信发送整合的数据到服务器。为防止项目代码又长又丑,采用分文件编写,精简,直观也方便查询。

        注意:本次项目只展现部分重要代码

main.cpp

#include <iostream>
using namespace std;
#include "application.h"int main()
{Application a1;    //自定义开始状态a1.exec();    //只做一个项目入口return 0;
}

application.cpp


#include "application.h"Application::Application()
{m_state = E_APP_STATE_START;        //初始化状态,使其固定在开始状态
}//这里设计的是按流程一步步往下走
int Application::exec()
{while(1){switch (m_state) {case E_APP_STATE_NONE:break;case E_APP_STATE_START://进入开始画面的状态{staticInterface s1;s1.show();}m_state = E_APP_STATE_LOGIN;break;case E_APP_STATE_LOGIN://进入登录界面的状态{LoginInterface l1;l1.show();}m_state = E_APP_STATE_MAIN;break;case E_APP_STATE_MAIN://进入主界面的状态{MainWidget m1;m1.show();}m_state = E_APP_STATE_LOGIN;break;}}
}

  staticInterface.cpp

#include "staticinterface.h"在.h文件中类私有成员里面定义的容器
//std::list<std::string> m_bmpList; //定义容器staticInterface::staticInterface()
{//初始化容器,将staticBmp文件夹里面的图片按顺序放入容器中m_bmpList = Dir::entryList("./bmp/staticBmp");
}void staticInterface::show()
{Bmp b1;//使用常量正向迭代器for(std::list<std::string>::iterator it = m_bmpList.begin() ; it!=m_bmpList.end(); it++){b1.setFileName(*it);b1.show();       //将容器中的图片一个个显示,1秒的间隔,形成一个简单的开始动画动图效果sleep(1);}
}

 登录页面代码过长切基本上重复代码,不做演示,其原理是固定x轴和y轴的大小,当点击时触发信号,显示数字并记录在类内中,同时设置9个数字也就是9个x轴和y轴的大小,点击设置好的确定按钮区,即可进入下一个页面。

maininterface.cpp

void MainWidget::show()
{//显示主界面图片Bmp b1("./bmp/main.bmp");b1.show();//显示菜单界面图片m_menuWidget->show();SendData s1;while(1){int x,y;//等待触摸屏 触摸TouchSreen touch;touch.waitTouch(x,y);if(x>=0 && x<800 && y>=0 && y<480) //点击到了  菜单界面区域{std::cout<<"点击到了菜单界面区域...."<<std::endl;//判断当前点击的是 哪个  菜单界面的按钮,然后切换不同的  页面//这里采用了枚举m_menuWidget->setPageWidget(x,y);}}
}
menuinterface.cpp
int MenuInterface::setPageWidget(int x, int y)
{int m_page;bool isExit = false;//根据点击的不同 坐标 ,判断点击的是哪个按钮,然后进行  换页if(x>=0 && x<=120 && y>=0 && y<100) //第一页  --缩略图{std::cout<<"肉太特么香了"<<std::endl;m_page = E_MENU_PAGE1;}else if(x>=0 && x<=120 && y>=100 && y<200)//第二页{std::cout<<"蔬菜太特么健康了"<<std::endl;m_page = E_MENU_PAGE2;}else if(x>=0 && x<=120 && y>=200 && y<300)//第3页{std::cout<<"水果太特么好看了"<<std::endl;m_page = E_MENU_PAGE3;}else if(x>=0 && x<=120 && y>=300 && y<400)//第4页{std::cout<<"饮料太特么爽了"<<std::endl;m_page = E_MENU_PAGE4;}else if(x>=740 && x<800 && y>=420 && y<480)//结算页面{std::cout<<"结算中......."<<std::endl;m_page = E_MENU_PAGE5;}
}
//后面有做一个图片缩略图,就不展示了

只展示一个,展示肉区

page1interface.cpp

void Page1Interface::show()
{//在 界面的右边  120 ~800 这个区域显示 四张  缩小后的图片int startX = 200;int startY = 50;int i=0;//使用stl库的正向迭代器顺序输出图片for(std::list<std::string>::iterator it=m_bmpList.begin(); it!=m_bmpList.end(); it++,i++){Bmp b1(it->data());switch (i%4) {case 0:b1.scaleShow(startX,startY);break;case 1:b1.scaleShow(startX+200+100,startY);break;case 2:b1.scaleShow(startX,startY+120+80);break;case 3:b1.scaleShow(startX+200+100,startY+120+80);break;}}
}//设置加菜减菜图片设计
void Page1Interface::addShow()
{Bmp b1("./bmp/jian.bmp");   //60*60b1.show(200,178);Bmp b2("./bmp/jia.bmp");    //60*60b2.show(340,178);Bmp b3("./bmp/jian.bmp");b3.show(500,178);Bmp b4("./bmp/jia.bmp");b4.show(640,178);Bmp b5("./bmp/jian.bmp");b5.show(200,(178+120+16+60));Bmp b6("./bmp/jia.bmp");b6.show(340,(178+120+16+60));Bmp b7("./bmp/jian.bmp");b7.show(500,(178+120+16+60));Bmp b8("./bmp/jia.bmp");b8.show(640,(178+120+16+60));}

 然后就是计算肉区点餐的数量,设置每个菜的价格,同一保存至一个类中,由于代码过长且重复,暂不予展示。其他菜区也是同样的操作不展示。

初始化TCP通信,发送数据

    //创建接口t1.applyInterface();        //封装成函数ssize_t wr_size;wr_size = write(t1.return_skt_fd(), buffer, strlen(buffer));//接受数据,拥有阻塞,如果没有数据将会阻塞在这里if(wr_size == -1)//出错了{perror("读取出错,那他走\n");return -1;}//关闭接口t1.closeCustomer();

此时后台成功接受数据

最后一步,将代码烧写进开发板

        通过SecureCRT串口连接开发板,传输编译好的arm文件(arm-linux-g++),再将项目所需图片下载进开发板,运行,实验,无BUG,数据接受完整,ok交差。

项目视频演示连接:https://live.csdn.net/v/287185

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/586322.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python mysql 查询字典类型

python mysql 查询字典类型 常见的类型&#xff0c;本次使用DictCursor 具体代码 Author: Jeff.zheng Date : 2024-04-02 Desc : 修改游标 import pymysqlif __name__ __main__:connection connection pymysql.connect(host"192.168.10.163", user"root&…

【Redis 知识储备】应⽤数据分离架构 -- 分布系统的演进(2)

应⽤数据分离架构 随着系统的上线&#xff0c;我们不出意外地获得了成功。市场上出现了⼀批忠实于我们的⽤⼾&#xff0c;使得系统的访问量逐步上升&#xff0c;逐渐逼近了硬件资源的极限&#xff0c;同时团队也在此期间积累了对业务流程的⼀批经验。⾯对当前的性能压⼒&#x…

马上蓝桥了,干货总结基础树论知识点

目录 今日知识点&#xff1a;对于每个子树如果和小于0就返回0&#xff1b;如果大于0就直接返回。 注意异或的性质&#xff0c;偶消奇不消&#xff0c;所以lca上面的都消掉了&#xff0c;并不需要跑lca&#xff0c;也就是说只需要把根到所有点的距离跑出来即可 如果上传过来小…

基于 YOLO V8 Pose Fine-Tuning 训练 15 点人脸关键点检测模型

一、YOLO V8 Pose YOLO V8 在上篇文章中进了简单的介绍&#xff0c;并基于YOLO V8 Fine-Tuning 训练了自定义的目标检测模型&#xff0c;而YOLO V8 Pose 是建立在YOLO V8基础上的关键点检测模型&#xff0c;本文基于 yolov8n-pose 模型实验 Fine-Tuning 训练15 点人脸关键点检…

我的C++奇迹之旅:值和引用的本质效率与性能比较

文章目录 &#x1f4dd;引用&#x1f320;引用概念&#x1f309;引用特性 &#x1f320;使用场景&#x1f309;做参数&#xff08;传值与传地址&#xff09;&#x1f309;传值、传引用效率比较 &#x1f320;引用做返回值&#x1f309;引用和指针的区别 &#x1f320;常引用&am…

Visual Studio安装遇到的问题

因为在安装pytorch3d0.3.0时遇到问题&#xff0c;提示没有cl.exe&#xff0c;VS的C编译组件&#xff0c;查了下2019版比2022问题少&#xff0c;下载安装时遇到的问题记录&#xff1a; 查看搜素栏搜时间&#xff0c;查看系统日志&#xff0c;报错为&#xff1a; 创建 TLS 客户端…

蓝桥杯 - 正则问题

解题思路&#xff1a; dfs import java.util.Scanner;public class Main {static int pos -1; // 充当charAt下标static String s;// 字符串型的静态变量public static void main(String[] args) {Scanner scanner new Scanner(System.in);s scanner.nextLine();System.ou…

4款在线网页原型图设计软件推荐

与桌面端相比&#xff0c;在线网页原型设计软件的使用具有优势&#xff0c;因为在线网页原型设计软件在整个使用过程中不需要安装&#xff0c;在线网页原型设计软件在任何地方都没有限制。更重要的是&#xff0c;无论是现在使用的 Linux&#xff0c;在线网页原型设计软件在操作…

浅聊什么是Redis?

需求&#xff1a;MySQL面临大量的查询&#xff0c;即读写操作&#xff0c;因此类比CPU&#xff0c;给数据加缓存&#xff0c;Redis诞生。应用程序从MySQL查询的数据&#xff0c;在Redis设置缓存&#xff08;记录在内存中&#xff0c;无需IO操作&#xff09;&#xff0c;后再需要…

SpringBoot整合Netty整合WebSocket-带参认证

文章目录 一. VectorNettyApplication启动类配置二.WebSocketServerBoot初始化服务端Netty三. WebsocketServerChannelInitializer初始化服务端Netty读写处理器四.initParamHandler处理器-去参websocket识别五.MessageHandler核心业务处理类-采用工厂策略模式5.1 策略上下文 六…

服务器设置了端口映射之后外网还是访问不了服务器

目录 排查思路参考&#xff1a; 1、确认服务是否在运行 2、确认端口映射设置是否正确 3、使用防火墙测试到服务器的连通性 4、检查服务内部的配置 5、解决办法 6、学习小分享 我们在一个完整的网络数据存储服务系统设备中都会存有业务服务器、防火墙、交换机、路由器&a…

Allavsoft for Mac v3.27.0.8852注册激活版 优秀的视频下载工具

Allavsoft for Mac是一款功能强大的多媒体下载和转换工具&#xff0c;支持从各种在线视频网站和流媒体服务下载视频、音频和图片。它具备批量下载和转换功能&#xff0c;可将文件转换为多种格式&#xff0c;以适应不同设备的播放需求。此外&#xff0c;Allavsoft还提供视频编辑…