【OK210试用体验】+第十六篇☞qt4下串口gui项目剧终 - 在线问答 - 电子技术论坛 - 最好最受欢迎电子论坛!

【OK210试用体验】+第十六篇☞qt4下串口gui项目剧终

杨永胜 ( 楼主 ) 2015-9-22 21:11:33  显示全部楼层
本帖最后由 iysheng 于 2015-9-23 08:23 编辑

今天晚上,至此,我自己感觉可以暂时告一段落了,距离我发第一篇帖子,足足两个月了,其间有痛苦(有时候一个问题好些天都不能解决,那一段时间晚上睡觉都睡不好),但是,不管是向牛人请教还是在网上搜寻对自己有用的信息,期间的感觉不好说的很清楚,但是,可以肯定的是,当我把好几天的问题解决的那一刹那,心里面满满充斥的高兴与激动,或许那是真的,你付出的越多,当时收获的时候,你的心情就越激动,所以这也是一个相互制约的过程。我希望可以继续在这条道路上前行,既然选择了远方,就要风雨兼程,今天,也刚好是我们学校开学典礼的日子,在会上我也听到了有人引用这句话。
好了,废话也不说太多了,通过在上次的程序和界面上的修改,这次程序整个算是可以实现了。
首先我把显示时间那部分label,换成了Line Edit,label部分知识显示我的一个标题iysheng‘s GPS clock。然后,我又添加了一个信号和插槽的链接,这样可以在串口读到数据后就实时的显示出来。
界面部分,变化如下:
gps.PNG 接下来就是主要的代码部分了,main函数,我没有修改。主要是修改了mywidget.cpp和mywidget.h两个文件,分别如下:
mywidget.h代码如下:
  1. #ifndef MYWIDGET_INCLUDED
  2. #define MYWIDGET_INCLUDED

  3. #include
  4. #include "ui_mywidget.h"

  5. class MyWidget:public QWidget{
  6.     Q_OBJECT
  7. public:
  8.     MyWidget();
  9.     int aopen();
  10.     virtual ~MyWidget();
  11. private:
  12.     int fd;
  13.     char c[3];//显示时间小时的数组,实际也是字符串,c[2]='\0'
  14.     char c1[3];//显示时间分钟的数组,实际也是字符串,c[2]='\0'
  15.     char c2[3]; //显示时间秒的数组,实际也是字符串,c[2]='\0'
  16.     Ui::MyWidget ui;
  17. public slots:
  18.     void send();
  19. };

  20. #endif
复制代码
mywidget.cpp代码如下
  1. #include "mywidget.h"
  2. #include
  3. #include
  4. #include
  5. #include
  6. #include
  7. #include
  8. #include
  9. #include
  10. #include
  11. #include
  12. #include
  13. #include tifier>

  14. MyWidget::MyWidget()
  15. {
  16.     ui.setupUi(this);
  17. }

  18. MyWidget::~MyWidget()
  19. {
  20. }
  21. int MyWidget::aopen()
  22. {
  23.     QLineEdit *lineEdit4 = ui.lineEdit4;
  24.         struct termios uart1;
  25.         QSocketNotifier *sn;

  26.          const char er[] = "failed!";
  27.         const char su[] = "success!";
  28.         fd = open("/dev/s3c2410_serial0", O_RDWR|O_NOCTTY);//以读写方式打开设备
  29.         if (fd == -1){
  30.                 lineEdit4->setText(QString(er));//提示打开串口错误
  31.                 return errno;}
  32.         else
  33.                 lineEdit4->setText(QString(su));//提示成功打开串口
  34.         tcgetattr(fd, &uart1);        
  35.         uart1.c_lflag &= ~(ECHO|ECHOE|ISIG|ICANON);
  36.         uart1.c_oflag &= ~OPOST;
  37.         tcsetattr(fd, TCSANOW,&uart1);
  38.         
  39.         sn = new QSocketNotifier(fd, QSocketNotifier::Read, this);
  40.         connect (sn, SIGNAL(activated(int)), this, SLOT(send()));//创建串口接受数据和显示之间的信号插槽的连接
  41.         
  42.         c[0] = '1';
  43.         c[1] = '9';
  44.         c[2] = '\0';//字符串的结束字符

  45.         c1[0] = '4';
  46.         c1[1] = '9';
  47.         c1[2] = '\0';//字符串的结束字符
  48.         
  49.         c2[0] = '0';
  50.         c2[1] = '9';
  51.         c2[2] = '\0';//为了模拟效果,进行的初始化
  52.         return 0;
  53. }

  54. void MyWidget::send()//整个大的数据提取的过程是从我的第十三篇帖子中复制过来的
  55. {
  56.     int rb;
  57.     char flag;
  58.         char num[6] = {0,0,0,0,0,0};
  59.         char time[10] = {0,0,0,0,0,0,0,0,0,0};
  60.     QLineEdit *lineEdit = ui.lineEdit;
  61.         QLineEdit *lineEdit1 = ui.lineEdit1;
  62.         QLineEdit *lineEdit2 = ui.lineEdit2;
  63.                     
  64.         rb = read(fd, &flag, 1);
  65.         if (flag == '美元符号'){
  66.             rb = read(fd, num, 5);
  67.         num[5]='\0';
  68.         if (strcmp(num, "GPGGA") == 0)
  69.         {        
  70.         read(fd,time,10);
  71.         
  72.         c[0] = time[1];
  73.         c[1] = time[2];//给小时数据赋值
  74.         c1[0] = time[3];
  75.         c1[1] = time[4];//给分钟数据赋值
  76.         c2[0] = time[5];
  77.         c2[1] = time[6]; //给秒数据赋值
  78.         }
  79.     }
  80.         
  81.         c2[0] += 1;//通过按键Time,模拟信号插槽,实现数据的变化,
  82.         
  83.         
  84.                 lineEdit->setText(QString(c));//显示小时
  85.                 lineEdit1->setText(QString(c1));//显示分钟
  86.                 lineEdit2->setText(QString(c2));//显示秒

  87. }
复制代码
整个代码就如上面所示。
接下来就是执行如下命令,
qmake
qmake -project
make
截图如下:
qmkae.PNG
接下来就是仿真运行,如下所示(由于我没有外接屏幕,更不会有串口接受数据,所以,我通过按键触发信号,实现send()函数的执行,中间我截取了两张图片):
0.PNG 3.PNG 效果还是不错的,就是Hour那个地方出现了些许乱码,通过按键Time实现了加1的运算(只是为了测试),和预期符合。
最后,我再附上一张显示良好的截图。如下:
su.PNG

所以,至此,我的项目算是告一段落了。仔细想想这两个月的时间,有苦也有甜




4个回复

gjianw217 发表于 2015-9-23 11:31:59
不错,有实物就更好了!
回复

举报 使用道具

杨永胜 发表于 2015-9-23 12:20:28
gjianw217 发表于 2015-9-23 11:31
不错,有实物就更好了!

嗯嗯,,,,现在就是没有屏幕。
栾新科 发表于 2015-9-25 14:54:12
iysheng 发表于 2015-9-23 12:20
嗯嗯,,,,现在就是没有屏幕。

买一个,有优惠
杨永胜 发表于 2015-9-25 18:30:30
forlinx 发表于 2015-9-25 14:54
买一个,有优惠

真的吗?优惠多少钱啊,
您需要登录后才可以回帖 登录 | 注册

本版积分规则


关闭

站长推荐上一条 /6 下一条

小黑屋|手机版|Archiver|电子发烧友 ( 湘ICP备2023018690号 )

GMT+8, 2024-4-18 13:51 , Processed in 0.563700 second(s), Total 60, Slave 41 queries .

Powered by 电子发烧友网

© 2015 bbs.elecfans.com

微信扫描
快速回复 返回顶部 返回列表