当前位置:   article > 正文

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

基于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

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

application.cpp

  1. #include "application.h"
  2. Application::Application()
  3. {
  4. m_state = E_APP_STATE_START; //初始化状态,使其固定在开始状态
  5. }
  6. //这里设计的是按流程一步步往下走
  7. int Application::exec()
  8. {
  9. while(1)
  10. {
  11. switch (m_state) {
  12. case E_APP_STATE_NONE:
  13. break;
  14. case E_APP_STATE_START://进入开始画面的状态
  15. {
  16. staticInterface s1;
  17. s1.show();
  18. }
  19. m_state = E_APP_STATE_LOGIN;
  20. break;
  21. case E_APP_STATE_LOGIN://进入登录界面的状态
  22. {
  23. LoginInterface l1;
  24. l1.show();
  25. }
  26. m_state = E_APP_STATE_MAIN;
  27. break;
  28. case E_APP_STATE_MAIN://进入主界面的状态
  29. {
  30. MainWidget m1;
  31. m1.show();
  32. }
  33. m_state = E_APP_STATE_LOGIN;
  34. break;
  35. }
  36. }
  37. }

  staticInterface.cpp

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

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

maininterface.cpp

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

只展示一个,展示肉区

page1interface.cpp

  1. void Page1Interface::show()
  2. {
  3. //在 界面的右边 120 ~800 这个区域显示 四张 缩小后的图片
  4. int startX = 200;
  5. int startY = 50;
  6. int i=0;
  7. //使用stl库的正向迭代器顺序输出图片
  8. for(std::list<std::string>::iterator it=m_bmpList.begin(); it!=m_bmpList.end(); it++,i++)
  9. {
  10. Bmp b1(it->data());
  11. switch (i%4) {
  12. case 0:
  13. b1.scaleShow(startX,startY);
  14. break;
  15. case 1:
  16. b1.scaleShow(startX+200+100,startY);
  17. break;
  18. case 2:
  19. b1.scaleShow(startX,startY+120+80);
  20. break;
  21. case 3:
  22. b1.scaleShow(startX+200+100,startY+120+80);
  23. break;
  24. }
  25. }
  26. }
  27. //设置加菜减菜图片设计
  28. void Page1Interface::addShow()
  29. {
  30. Bmp b1("./bmp/jian.bmp"); //60*60
  31. b1.show(200,178);
  32. Bmp b2("./bmp/jia.bmp"); //60*60
  33. b2.show(340,178);
  34. Bmp b3("./bmp/jian.bmp");
  35. b3.show(500,178);
  36. Bmp b4("./bmp/jia.bmp");
  37. b4.show(640,178);
  38. Bmp b5("./bmp/jian.bmp");
  39. b5.show(200,(178+120+16+60));
  40. Bmp b6("./bmp/jia.bmp");
  41. b6.show(340,(178+120+16+60));
  42. Bmp b7("./bmp/jian.bmp");
  43. b7.show(500,(178+120+16+60));
  44. Bmp b8("./bmp/jia.bmp");
  45. b8.show(640,(178+120+16+60));
  46. }

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

初始化TCP通信,发送数据

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

此时后台成功接受数据

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

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

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

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号