【OK210试用体验】之基于OK210的计算机绘图仪软件【项目完结】 - 在线问答 - 电子技术论坛 - 最好最受欢迎电子论坛!

【OK210试用体验】之基于OK210的计算机绘图仪软件【项目完结】

windworld ( 楼主 ) 2015-10-20 17:06:36  只看该作者 倒序浏览
本帖最后由 windworld 于 2015-10-20 18:00 编辑

    首先再次对飞凌和电子发烧友论坛为我们提供此次开发板试用活动表示感谢。从8月份板子申请到现在试用差不多已经两个多月了,期间从开发平台的搭建到Qt的移植以及程序的调试,碰到的问题可以说是多种多样,尽管过程比较曲折,但最终还是初步完成了绘图上位机软件的设计。在这段时间的学习中也让自己提高了发现问题解决问题的能力,对后面嵌入式linux学习有了一个大概的思路,另外通过分享帖子的方式也让自己慢慢学会了如何通过帖子博客等形式与他人分享自己的学习心得并且对所学知识进行及时总结,在这里非常感谢论坛和网上一些好友的帮助以及飞凌官方给予的技术支持,同时特别感谢之前的队友在项目中提供的帮助。
1.项目概述:
    本项目主要是实现一个简单的绘图仪的功能,在这里采用OK210来完成上位机部分的设计。项目利用OK210的7寸屏采集用户在绘画板上绘画形成的坐标完成绘图。系统上位机软件是通过QT编程,运行在linux上的应用程序,因此设计需要完成linux开发环境的搭建,以及开发平台的uboot、内核、文件系统的移植,最终将程序运行在开发平台(OK210开发板)的Linux系统上。
    绘图器为了能够实现绘图过程,必须拥有用户端界面设计。用户端采用Qt4编写好的交互软件并运行在OK210平台上。该软件通过对登录用户的识别,选取相应的配置和数据文件。绘画过程中通过该软件对用户输入的图画或文字进行采集并处理,发送给设备控制端。
2.软硬环境
(1)硬件环境:
  • 飞凌OK210开发板
  • 飞凌7寸液晶模块
(2)软件环境:
  • Linux操作系统
  • Qt 4.7.1开发环境
  • 绘图仪软件
  • 系统服务软件
3.绘图软件设计框图

4.1.登录界面
    登录界面主要实现用户登陆的功能,这里做的比较简单,仅仅在用了个label并添加上信号和槽,电机login即可进入绘图软件的绘图界面,界面如下:

    这里由于手机拍摄光线不是很好,所以看起来效果偏暗,实际运行和前面在Ubuntu下运行效果是一样的,Qt支持一次编写,多次编译,前后只不过运行平台不一样,实现的效果是一样的。下面附上此部分源码:
  1. #include "mydialog.h"
  2. #include "ui_mydialog.h"


  3. myDialog::myDialog(QWidget *parent) :
  4.     QDialog(parent),
  5.     ui(new Ui::myDialog)
  6. {
  7.     ui->setupUi(this);
  8.     this->setWindowtitle(QApplication::translate("myDialog", "西安电子科技大学", 0, QApplication::UnicodeUTF8));
  9.     ui->switch_2->setText(QApplication::translate("myDialog", "Login", 0, QApplication::UnicodeUTF8));
  10.     QPixmap pixmap(":/new/prefix1/logo.jpg");
  11.     QPalette palette;
  12.     palette.setBrush(backgroundRole(), QBrush(pixmap));
  13.     setPalette(palette);
  14. }

  15. myDialog::~myDialog()
  16. {
  17.     delete ui;
  18. }
复制代码
4.2.用户操作界面
    用户操作界面主要实现用户对图画或者文字的输入、保存、读取,以及对笔宽、颜色选择。界面如下:


左边是绘图区域,右边是绘图过程中一些选择设置按钮
部分源码看下面:
  1. #include "mywidget.h"
  2. #include "ui_mywidget.h"
  3. #include "QPainter"
  4. #include "QDebug"
  5. #include "mydialog.h"
  6. #include "QDesktopWidget"
  7. #include "QScreen"

  8. //#include
  9. #include
  10. #include
  11. #include
  12. #include
  13. #include
  14. #include

  15. #include
  16. #include
  17. #include
  18. #include

  19. myWidget::myWidget(QWidget *parent) :
  20.     QWidget(parent),
  21.     ui(new Ui::myWidget)
  22. {
  23.     ui->setupUi(this);
  24.     this->setWindowTitle(QApplication::translate("myWidget", "计算机辅助绘图仪", 0, QApplication::UnicodeUTF8));

  25.     QTimer *timer = new QTimer(this);
  26.     //关联定时器溢出信号和相应的槽函数
  27.     connect(timer, SIGNAL(timeout()), this, SLOT(timerUpdate()));
  28.     timer->start(1000);

  29.     connect(ui->red,SIGNAL(pressed()),this,SLOT(on_red_clicked()));
  30.     connect(ui->blue,SIGNAL(pressed()),this,SLOT(on_blue_clicked()));
  31.     connect(ui->yellow,SIGNAL(pressed()),this,SLOT(on_yellow_clicked()));
  32.     connect(ui->serial,SIGNAL(pressed()),this,SLOT(serialport_press()));
  33.     connect(ui->spinBox,SIGNAL(valueChanged(int)),this,SLOT(spinbox_changed(int)));
  34.     connect(ui->reset,SIGNAL(pressed()),this,SLOT(reset_clicked()));
  35.     connect(ui->SEND,SIGNAL(pressed()),this,SLOT(SEND_pressed()));

  36.     pix = QPixmap(400,300);
  37.     pix.fill(Qt::white);
  38.     memset(send_pix,0,sizeof send_pix);
  39.     sum_point=0;
  40.     //showMaximized ();
  41.     pix = QPixmap(width()-275,height ());
  42.     pix.fill(Qt::white);

  43.     QPixmap pixmap(":/new/prefix1/image.jpg");
  44.     QPalette palette;
  45.     palette.setBrush(backgroundRole(), QBrush(pixmap));
  46.     setPalette(palette);

  47.     ui->spinBox->setValue(2);
  48.     pen_width=5;
  49.     this->setAttribute(Qt::WA_PaintOutsidePaintEvent);
  50. }
  51. /********************************************************
  52.   function:openSerialPort()
  53.   *******************************************************/
  54. int myWidget::openSerialPort()
  55. {
  56.     int fd = -1;
  57.     const char *devName = "/dev/ttySAC3";
  58.     fd = ::open(devName,O_RDWR|O_NONBLOCK);
  59.     if(fd<0)
  60.     {
  61.         return -1;
  62.     }
  63.     termios serialAttr;
  64.     memset(&serialAttr,0,sizeof serialAttr);
  65.     serialAttr.c_iflag = IGNPAR;
  66.     serialAttr.c_cflag = B115200|HUPCL|CS8|CREAD|CLOCAL;
  67.     serialAttr.c_cc[VMIN]=1;
  68.     if(tcsetattr(fd,TCSANOW,&serialAttr)!=0){return -1;}
  69.     return fd;

  70. }

  71. void myWidget::remoteDatelncoming()
  72. {
  73.     char c[10];
  74.     memset(c,0,10);
  75.     if(read(m_fd,c,10)==0)
  76.     {
  77.         qDebug()<<"error!";
  78.         return ;
  79.     }

  80. }

  81. void myWidget::timerUpdate()
  82. {
  83.    //获取系统现在的时间
  84.    QDateTime time = QDateTime::currentDateTime();
  85.    //设置系统时间显示格式
  86.    QString str = time.toString("yyyy-MM-dd hh:mm:ss dddd");
  87.    //在标签上显示时间
  88.    ui->label->setText(str);
  89. }

  90. void myWidget::spinbox_changed(int value)
  91. {
  92.     qDebug()<<"this value is "<
  93.     pen_width=(char) value+3;
  94.     if(value==0)
  95.         ui->spinBox->setValue(1);
  96.     else if(value>3)
  97.         ui->spinBox->setValue(3);

  98. }
复制代码
    这里首先要根据自己要绘制的内容选取画笔的颜色红、黄、蓝,然后通过触摸屏或是鼠标在绘图面板进行书写和绘画,最后这些形成的坐标信息会转换成十六进制通过串口发送给下位机。打开串口,点击上位机“发送数据”下位机即可通过控制X—Y轴方向上的步进电机实现绘画(这里要通过另外机械结构实现)。
5.实际运行效果图
    上面几张实际效果图分别从简单几何图形、多色绘画、汉字、绘画的角度程序绘图仪的初步效果(自己手画的,有的磕碜哈哈~)。绘画过程中还可以通过保存某些绘制好的图画,以TXT文本的形式存储到SD卡上,方便下次直接调用。操作如下:

    上位机和下位机同学采用蓝牙串口实现,这里通过串口调试助手看下绘图仪点击发送数据后下位机收到的数据

最后附上坐标编码:
附录:1、【OK210试用体验】之初
https://bbs.elecfans.com/jishu_509863_1_1.html
2、【OK210试用体验】之开发板Linux平台搭
https://bbs.elecfans.com/jishu_515370_1_1.html
3、【OK210试用体验】之samba服务器配
https://bbs.elecfans.com/jishu_515722_1_1.html
4、【OK210试用体验】之QT编译过程中疑惑求
https://bbs.elecfans.com/jishu_516067_1_1.html
5、【OK210试用体验】OK210开发板实现NFS目录挂
https://bbs.elecfans.com/jishu_516100_1_1.html
6、【OK210试用体验】之qt移植tslib的编译和配
https://bbs.elecfans.com/jishu_516419_1_1.html
7、
【OK210试用体验】之qt移植中qt4.7.1编
https://bbs.elecfans.com/jishu_517668_1_1.html
8、【OK210试用体验】之VMware下Ubuntu磁盘空间扩
https://bbs.elecfans.com/jishu_517691_1_1.html
9、【OK210试用体验】之qt-sdk真机下环境搭
https://bbs.elecfans.com/jishu_517971_1_1.html
10、【OK210试用体验】qt下hello world程序测试及晒屏
https://bbs.elecfans.com/jishu_518162_1_1.html
11、【OK210试用体验】之疑惑VMware下Ubuntu扩展磁盘容量后无法启
https://bbs.elecfans.com/jishu_518579_1_1.html
12、【OK210试用体验】之绘图仪设计雏
https://bbs.elecfans.com/jishu_520081_1_1.html
13、【OK210试用体验】之OK210上添加Qt支持中文方法

坐标编码.zip

574 Bytes, 下载次数: 0, 下载积分: 积分 -1 分

14个回复

小麦地 发表于 2015-10-20 17:56:55
好帖 详细的很 期待你其他的分享咯
himol 发表于 2015-10-21 11:10:06
受教了。。。。。非常感谢
回复

举报 使用道具

栾新科 发表于 2015-10-26 11:34:00
帖子很详细,恭喜通过
回复

举报 使用道具

windworld 发表于 2015-10-26 12:46:19
forlinx 发表于 2015-10-26 11:34
帖子很详细,恭喜通过

谢谢!!!
lkl0305 发表于 2015-10-26 13:27:46
多谢分享,不错!!!!
回复

举报 使用道具

kakadajun 发表于 2015-10-27 08:47:39
好东西,但是我看不懂呀
windworld 发表于 2015-10-27 10:02:46
kakadajun 发表于 2015-10-27 08:47
好东西,但是我看不懂呀

Qt在OK210上面做的一个绘图软件,可以了解下Qt看看
发表于 2015-11-2 15:39:53
Qt在OK210上面做的一个绘图软件,可以了解下Qt看看
陈星 发表于 2015-11-2 16:35:30
           校友以你为荣
windworld 发表于 2015-11-2 16:41:47

嗯呢,相互学习
深深 发表于 2015-11-2 17:41:13
卤煮好手艺
回复

举报 使用道具

静水竹林 发表于 2015-11-15 09:25:29
不错,可以画素描
回复

举报 使用道具

姚江涛 发表于 2015-12-21 12:01:38
不错啊 赞一个 。。。。。。。。。
回复

举报 使用道具

擦肩的阳光 发表于 2016-1-4 10:55:25
西电大神哦,敢问是哪一级的?
您需要登录后才可以回帖 登录 | 注册

本版积分规则


关闭

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

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

GMT+8, 2024-4-23 17:29 , Processed in 0.382592 second(s), Total 35, Slave 23 queries .

Powered by 电子发烧友网

© 2015 bbs.elecfans.com

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