找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 3547|回复: 9

【Part2】自制737飞行时钟-控制程序讲解及开源

  [复制链接]
 楼主| 发表于 2021-10-6 14:14:19 | 显示全部楼层 |阅读模式
本帖最后由 LittleKite 于 2021-10-19 15:11 编辑

前言:
经过Part1的基本介绍,我们已经把时钟的基本构架确定好了。有了肉体和骨骼,我们现在还缺少时钟的灵魂,那就是控制程序。
前面两帖及后续:
【预热】自制737飞行时钟-全面开源-[机场酒吧]-SINO模拟飞行论坛 SINO模拟飞行网 飞行模拟器 FSX P3D SINO模拟飞行社区 - (sinofsx.com)
【Part1】自制737飞行时钟-总体架构及物料清单-[机场酒吧]-SINO模拟飞行论坛 SINO模拟飞行网 飞行模拟器 FSX P3D SINO模拟飞行社区 - (sinofsx.com)
【Part3】自制737飞行时钟-外壳模型及3D打印-[机场酒吧]-SINO模拟飞行网 飞行模拟器 FSX P3D SINO模拟飞行社区 - (sinofsx.com)

正文
控制程序分为两个主要部分:
一、 DWIN串口显示屏的图标、字体素材及控制脚本;
二、 Arduino控制板的时钟主控及逻辑程序。
如果你只想做出这个东西来,看“基础”的部分足矣;如果向深入了解并且改造,再看“进阶”部分。

下文所有工程文件、源代码、示例文档下载地址:
pa删n.baidu.c删om/s/1im-qajXthOAMV4t0a5QPSw  提取码: seib


第一部分- DWIN串口显示屏的图标、字体素材及控制脚本

基础
以上串口显示屏的素材及控制程序我已经整理好,详见【附件1】。解压缩后通过将整个“DWIN_SET”文件夹及所包含内容拷贝至TF卡,然后烧录至显示屏控制板中即可。具体烧录方法请查看【附件1】中的【T5L _DGUS II应用开发指南.pdf】的第23页“3.2SD卡接口下载方法”。

确认烧录完成后,再次上电,屏幕应该可以显示时钟的通电测试界面了(图标全部显示)。
源代码:见网盘【附件1】
Test1.jpg
图1:试验阶段的电路板子(最开始时面包板接线实验,乱七八糟也忘了拍照)

进阶
Dwin串口屏提供了强大(本案例够用)的控制功能及操作文档【T5L _DGUS II应用开发指南.pdf】。在本案例中,主要涉及了以下几个类型的操作:

   1. 页面切换。正常显示时钟界面,通过长按set按键进入并退出时钟设置界面(图5)。这里使用的是“5.1 系统变量接口“中的页面切换命令实现。
   2. 图标显示、切换及消失。大部分的时钟界面元素都是通过这种方式实现的。这里使用的是“7.2.1变量图标显示”方式实现。
   3. CHR秒表功能的秒针旋转。这里使用的是“7.2.6 图标旋转指示显示”功能实现。

对显示屏的控制可能有点抽象,因为他是通过直接编辑一串16进制数据,然后发送给串口从而实现控制功能。针对页面所有图标及功能,我还整理了一个串口命令示例文档【测试命令.txt】。使用串口直接连接显示屏的控制板及电脑,就可以通过“串口助手”之类的软件向显示屏发送命令(速率115200),此时显示屏上的图标就会有对应的变化了。也就是说,Arduino控制板就是通过串口命令直接控制了显示屏的显示信息,当然我们也可以通过电脑来直接调试显示屏。

当你可以通过串口助手,发送【测试命令.txt】中的数据来控制屏幕图标显示,并且可以修改命令数值来完成其他显示控制,相信你已经对如何控制时钟显示屏的显示有了一定了解。【Address map.jpg】中记录的是各个图标的命令地址,【显示数据帧.xlsx】是Arduino控制板发送给屏幕的一帧串口数据结构详解,以上几个文档帮进一步熟悉控制显示。

对了,如果你问显示的各个图标和字体怎么做出来的?说出来你可能不信:用PPT。

ppt.jpg
图2:万能PPT,关键这玩意做出来的图标还是矢量的

各位可以尝试修改各元素、命令,其工程文件在【附件1】-【Clock_ScreenControl_Project】文件夹中。从而彻底改变时钟显示的UI。这里,我还准备了一个仿“空速表”的时钟UI,详见【附件1】中的PPT文件,希望有能力的将其Dwin及arduino程序分别做好适配,将“空速表时钟”程序分享给大家。

相关资源网站:w删ww.dwin.co删m.cn/  迪文官网。
foru删m.dwin.co删m.cn/  迪文开发者论坛,有很多Demo。


第二部分-Arduino控制板的时钟主控及逻辑程序

基础
Arduino号称电子积木,现在小学生学编程和单片机都可以用这个。我的编程语法和构架是菜鸟级别的,反正我的目标就是能实现功能,各位大神勿喷就行。如果真的厉害,那就拜托优化后分享给大家吧。

整个时钟的控制程序根据按键功能切分出了多个文件,其中【Clock_ArduinoV1.0.ino】是主文件,使用Arduino IDE打开它后其他子文件也都会依次打开。里面的注释已经非常详细了,欢迎大家阅读这座“屎山”,如果有问题欢迎留言讨论。

源代码:见网盘【附件2】
ArduinoIDE.jpg
图3:Arduino IDE加载本项目并编译验证通过

我这里只提几个要点:
1.我实际使用的是arduino nano的兼容板(也就是第三方自制),其使用的是Atmega168芯片。这个芯片的缓存会比常见的Arduino nano V3使用的Atmega328p芯片缩水一半,但本项目也够用了(所以编译后会红字提示可用内存偏低)。使用IDE编译和烧录的时候记得选对了。

ArduinoAtmega.jpg
图4:编译前注意开发板及芯片选择正确,烧录前确认串口被识别并选择正确

2. 这个程序加载了数个第三方库,请记得在“库管理”中提前安装好各个对应版本的“库”,否则编译报错。推荐直接从Arduino IDE的管理库功能直接搜索及下载,比较省事。第三方库包括:
    1) DS3232RTC v1.1.3:从DS3231读取万年历及写入设置功能,下载后还要有其支持库TimeLib:github.com/JChristensen/DS3232RTC
    2) Chrono v1.3.0:使Arduino拥有异步处理能力,下载后还要有其支持库LightChrono:github.com/SofaPirate/Chrono
    3) 其他都是自带库,直接#include

3. 程序上传及烧录:网上找找教程,配置好Arduino IDE环境,确认编译通过且可以识别Arduino Nano端口,就可以上传烧录了。Clock上传后程序正常运作的标志是:Nano板载LED(D13)一1秒的间隔闪烁(不论其他外设模块是否接上)。

进阶
这个程序最重要的一点就是“异步”特性。具体来说:不能因为开启了“ET计时”功能而导致已经在运行的“CHR”秒表功能迟滞;也不能因为在设置“MAN TIME人工时间”长按加号、减号按键时导致界面卡顿。程序的各个功能模块都是独立以一个时序(线程)运行的。这也是我引入第三方chrono库的原因。程序最开始就声明的这几个变量,就是四个异步的节拍器Timer。

Chrono Timer0;//100ms
Chrono Timer1;//50ms
Chrono Timer2;//333ms
Chrono Timer3;//1000ms


他们按规定的间隔运行,例如:
Timer0负责屏幕数据刷新,他每0.1s发送一次屏幕显示数据,相等于屏幕的刷新率为10Hz。
Timer1负责监控按键状态,并负责触发按键按下后的事件。
Timer2负责CHR秒表功能。
Timer3负责3231时钟读取及主界面其他数据刷新显示,并以1秒的频率使板载LED闪烁。


其他的内容不详述了,各位看到了若有问题再讨论吧。另外,时钟的操作逻辑和真是飞机上的一样,我就是按照FCOM做的,但是不方便发我这份。论坛各路神仙如果有可以发一个到评论,我再加入附件。
Test2.jpg
图5:第一版装配实验,图上是设置界面
总结
程序这个部分是花了些功夫,大概花了2-3个月,每天下班、带娃睡觉后,挤出1-2小时学习实验、写代码。即使写的不好,或者只是来看个热闹,也希望各位多多宣传转发,支持更多的人分享原创。欢迎大家关注及讨论!



评分

参与人数 2支持 +2 收起 理由
sakis + 1 支持原创
619231273 + 1 --------

查看全部评分

发表于 2021-10-6 14:16:06 | 显示全部楼层
牛,支持一下大神
回复

使用道具 举报

发表于 2021-10-6 14:39:37 | 显示全部楼层
ohhhhhhhhhhhhhh
之前有个选修课也接触过一点点Arduino,不过都是跑虚拟的
回复

使用道具 举报

发表于 2021-10-6 14:55:58 | 显示全部楼层
楼主太强了!支持!
回复

使用道具 举报

发表于 2021-10-6 16:40:33 | 显示全部楼层
666楼主牛啊
回复

使用道具 举报

发表于 2021-10-6 19:18:37 | 显示全部楼层
期待后期量产上架
回复

使用道具 举报

 楼主| 发表于 2021-10-6 20:07:49 来自手机 | 显示全部楼层
橙子航空 发表于 2021-10-6 19:18
期待后期量产上架

没有打算量产。这个设计适合个人DIY,量产会亏哈哈哈。
回复

使用道具 举报

发表于 2021-10-17 22:06:39 | 显示全部楼层
3D打印部分能否也介绍一下经验
回复

使用道具 举报

发表于 2021-10-18 15:37:31 | 显示全部楼层
大神,跟你学习了
回复

使用道具 举报

 楼主| 发表于 2021-10-19 15:14:34 | 显示全部楼层
sakis 发表于 2021-10-17 22:06
3D打印部分能否也介绍一下经验

已经发第三期了,看看能否帮到你。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表