查看: 1397|回复: 0

香蕉派上的QT4串口指南针

[复制链接]
  • TA的每日心情
    开心
    2019-6-25 09:54
  • 签到天数: 216 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2015-2-12 09:02:27 | 显示全部楼层 |阅读模式
    分享到:
    使用QT4首先要安装QT4的环境,apt-get install qt4-designer qt4-qmake等,我是安装了这些……大家可以做个参考……

    安装好后,就可以在开始菜单的编程工具里找到设计器等工具

    当然,如果需要编译还得在终端执行qmake、make等命令
    嗯,打开QT设计器,就可以看到一个比较眼熟的窗口设计界面了~
    那么我们就来写个窗口吧~有UI设计绘制窗口还是很容易的。当然,对于QT我只是个新手,神马类神马指针我几乎都不懂,唯一记得比较清楚的是信号槽……
    我手上有个指南针模块,可以用串口和IIC来通讯,为了方便直接用串口,因为香蕉派上也有串口,或者用USB串口也很方便。

    连接模块上的TX和RX到香蕉派的串口Rx和Tx上,这里我为了方便用是接了个PL2303的USB转串口模块,所以一会用的串口终端是/dev/ttyUSB0
    那QT4怎么用串口呢?对于一个新手来说要自己写出来肯定是不太可能。没关系,百度!
    直接百度个QT4串口,拿回来自己看着研究,然后修改……【这里我用的是lincom的开源串口调试助手程序,在此感谢原作者】

    开源的好处就是酱紫,程序的一些功能不是自己需要的或者缺少自己需要的就可以随意修改为自己需要的功能。
    最后我是改成了这一个样子……中间加了一个Dial拨号盘组件,用来做指南针的指针盘,以及在最下面放了个角度显示的文本框,以及最后考虑到可能我会在树莓派上用以及为了看着方便添加了个隐藏其他多余内容的选择框。
    然后修改代码,在原来的程序里写一些转换的操作和对控件的控制。
    主要增加了这些内容:
    QString tda = temp.toHex();                //转换为16进制                        QString tdb = tda.remove(0,4);        //删掉前面的换行                        // tda = tdb.remove();                        QString tdc = tda.remove(6,7);        //删掉小数点后的数据                                                QString dbai = tdc.left(2);                //从左边取2位为百位                        QString dshi = tdc.mid(2,2);        //取中间2位为十位                        QString dge = tdc.remove(0,4);        //删掉前面4位为最后的个位                        //                        QByteArray qbai = dbai.toLatin1();//                        QByteArray qshi = dshi.toLatin1();//                        QByteArray qge = dge.toLatin1();                                                int intbai = dbai.toInt(&ok,10);                        int intshi = dshi.toInt(&ok,10);                        int intge = dge.toInt(&ok,10);                        intbai-=30;                        intshi-=30;                        intge-=30;                        intbai=intbai*100;                        intshi=intshi*10;                        int outint=intbai+intshi+intge;                                                QByteArray ba = tdc.toLatin1();        //转换整个16进制值,存入字节集用来在终端输出                                                const char *tstr = ba.data();        //转出字符串型                        printf("%s\n",tstr);                //输出                        ui->dial->setValue(outint);                        ui->spinBox->setValue(outint);在接收处理里写一些类型转换,把接收到的信息进行处理最后传递给dial和spinBox两个控件来显示方向信息。
    其中,printf的输出大家可以自己删掉,那是我写这段代码时为了方便调试写的,在终端输出一些数据。
    最后编译运行。
    cd ./lincomqmake && make && ./lincom如果一切顺利的话,就可以看到窗口了,首先选好串口,然后波特率,由于模块使用的是9600所以选9600,然后打开窗口

    串口打开后就可以在下面勾选连续发送,调整好合适的间隔发送时间,在发送数据里输入1点发送即可看到效果。因为模块的控制是被动的,你发送一个控制指令他才会返回对应的数据,1是控制输出角度信息,5是输出温度信息,不过这个温度似乎很不准……
    以及我还增加了个功能,为了方便查看我们可以点击右下角的隐藏选择框把串口的其他没必要的东西隐藏起来,需要显示的时候点击菜单的关于里选隐藏其他就可以重新显示。
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

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

    手机版|小黑屋|与非网

    GMT+8, 2024-11-18 14:02 , Processed in 0.115948 second(s), 18 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.