STONE串口屏 + Arduino + 物理治疗仪器

今天是2021年1月29日星期五,北京新冠疫情防控工作也在推进“原地过节”措施,家人表示春节期间不能互相探访,否则每人将被罚款1500元。似乎尽量少出门,如果没什么事最好待在家里,多做些项目,这也算是为国家做贡献。

几天前,触摸屏已经到货,我准备用它来升级物理治疗仪器!现在开始制定计划和步骤。

  1. 本项目基于对旧物理治疗仪器的升级,旨在为客户提供更好的使用体验。
  • 添加触摸屏按钮功能。
  • 通过与Arduino串口通信,实现触摸屏输入控制产品输出。
  1. 升级界面,在产品右侧添加触摸按钮,替换原有的硅胶物理按钮和编码器。
  • 制作带有触摸按钮位置的英文图片。
  • 将图片导入Tool4.3,制作并配置普通按钮、增量按钮和返回值按钮。
  1. 连接串口屏幕与Arduino控制板,实现编程控制。
  • 串口屏幕连接至MCU。
  • 串口通信与控制功能编程。
  • 在线调试。

按照上述计划,下一步是进行具体工作并解决在实施过程中遇到的各种问题。

首先,制作带有触摸按钮位置的英文图片

即在每个界面中添加必要的按钮,使这些按钮能够实现界面间的合理跳转;同时添加增量按钮以替代编码器调节输出强度。以下是两个示例。

STONE-STVI056WT-01-Arduino-Physical-Therapy-Instrument (1)

STONE-STVI056WT-01-Arduino-Physical-Therapy-Instrument (1)

接下来,将图片导入Tool4.3并创建三个按钮

这将通过继续观看相关视频并参考上次下载的Tool软件说明手册来完成。当然,关键是要做好笔记。

*通用按钮。在Tool4.3的工具菜单中选择“触摸配置(M)”,然后选择“按钮”,或点击图中“1”处的按钮工具,在指定位置创建按钮。在“按钮效果”的“2”处填写有效页面位置,在“页面切换”处选择跳转页面,即可完成按钮跳转功能。同一按钮可在不同页面复制。

STONE-STVI056WT-01-Arduino-Physical-Therapy-Instrument (1)

**增量按钮。在工具4.3菜单的触摸配置(M)中勾选“增量调整”,或在图中“1”处点击按钮工具在指定位置创建按钮,并在“2”处填写“变量内存地址”使其与数据变量地址(0X0888)一致; 在“3”处的“数据自动上传后”复选框中勾选,以自动将更改上传至Arduino开发板的串口;在“4”处将“调整方式”设置为“++”或“–”; 在“5”中,将“调整步长”设置为步长值1;在“6”中,勾选“长按快速调整”复选框,以实现长按按钮进行快速调整。

*** 返回值按钮。在Tool4.3工具软件的“触摸配置(M)”菜单中勾选“返回按下键值”,或点击如上图所示的按钮工具,在指定位置创建按钮,并在标记处填写变量地址和键值。勾选“按下时自动上传返回值”。“测试”按钮的变量地址为0X0868,键值修改为“0055”(0x0055);“修复”按钮的变量地址为0X0858,键值修改为“0066”(0x0066);键测试串口助手返回以下值。

STONE-STVI056WT-01-Arduino-Physical-Therapy-Instrument (1)

STONE-STVI056WT-01-Arduino-Physical-Therapy-Instrument (1)

接下来,将串口屏幕连接至MCU。

根据经验,简单连接 Arduino 开发板的 TX、RX、GND 至串口屏幕的 DIN、DOUT、GND,结果“享受”了一次失败。快速查阅“Datasheet串口屏”PDF 电子手册,在第 31 页找到串口屏幕电路图,发现屏幕接口的 DIN、DOUT 信号为 RS232。此外,查看“LY-F2开发板电路图”,明显可见Arduino开发板的TX、RX直接输出微控制器端的TTL信号。故障原因显而易见,如何解决问题?顺便说一下,STONE附带一个适配器板,我找了很久,但也没有看到适配器板的电路图,所以我画了一个电路图(手绘,因为相对简单,我没有使用Protel99SE、PADS2000、AltiumDesigner 10、Cadence或AutoCAD 2010等软件。软件,因为我的电脑比较慢,这样可以节省一些时间)。从电路图中,我找到了解决问题的方法。适配器板上有一颗MAX232E1芯片,TX、RX信号通过跳线引出,起到转换作用,使Arduino开发板的串口TTL信号与串口屏的RS232信号能够匹配。从电路图还可知,STONE适配器板的DC12V电源供电给串口显示屏,内部MAX232E1和CH340C的+5V电源由USB提供,因此在使用RS232到串口TTL电平转换时,USB需要供电。对于适配器板上的MAX232芯片,Tin、Rout为0-5V,而Tout、Rin引脚为±15V逻辑电平。截图如下。

STONE-STVI056WT-01-Arduino-Physical-Therapy-Instrument (1)

STONE-STVI056WT-01-Arduino-Physical-Therapy-Instrument (1)

如图所示,串行屏幕输出为RS232电平,由于RS232采用±15V逻辑,因此能够实现更远距离的传输!请参考“LY-F2开发板电路图”,截图如下。

STONE-STVI056WT-01-Arduino-Physical-Therapy-Instrument (1)

其次,编程实现串行通信和控制功能。

选用了Arduino开发板与串口显示屏进行通信。我之前已完成过与显示屏的串口通信,且曾使用Arduino开发板完成过一个伺服电机控制售票箱自动化项目,效果良好,及时解决了需求方的痛点。这要归功于Arduino!这不是虚言,因为Arduino不仅性能优异、通用性强、即插即用、价格低廉、无需电路布局、无需焊接元件、开发环境简洁,还附带多种现成例程,使用起来非常方便!(此处并非Arduino广告)以下直接展示实物。

“Arduino语言指令”专注于串口收发功能指令的摘录,如下所示。

串口发送/接收功能

STONE-STVI056WT-01-Arduino-Physical-Therapy-Instrument (1)

如您所见,Arduino支持串口波特率为115200,这也是当前可选的最高值。

STONE-STVI056WT-01-Arduino-Physical-Therapy-Instrument (1)

STONE-STVI056WT-01-Arduino-Physical-Therapy-Instrument (1)

通过串口助手测试后,上述两个print函数以字符形式传输。 例如。

Serial.print(75,HEX);

传输的字符串为“4B”,这是字符“4”和“B”的ASCII值(0x34, 0x42);因此,serial.print()函数,无论是字符串还是数据,均以ASCII形式发送,不适合命令传输!

幸运的是,在 Arduino 1.0.5 中,通过菜单栏的“帮助”选项,点击“参考”项,会弹出按类别分类的函数描述,其中最新的串口函数为 serial.write(Val),截图如下。

STONE-STVI056WT-01-Arduino-Physical-Therapy-Instrument (1)

该函数传输二进制代码,测试传输正确且能正确翻页;如下所示。

STONE-STVI056WT-01-Arduino-Physical-Therapy-Instrument (1)

此外,serial.write(Val) 函数支持直接写入十六进制,例如 serial.write(0x80),编译和上传均成功,如下所示。因此,serial.write() 函数发送值 VAL 的二进制形式,而字符串以 ASCII 形式发送。

STONE-STVI056WT-01-Arduino-Physical-Therapy-Instrument (1)

STONE-STVI056WT-01-Arduino-Physical-Therapy-Instrument (1)

STONE-STVI056WT-01-Arduino-Physical-Therapy-Instrument (1)

对于Arduino开发环境,只需在Arduino-1.0.5软件包目录下直接运行arduino.exe。

STONE-STVI056WT-01-Arduino-Physical-Therapy-Instrument (1)

双击后稍等片刻,将出现以下启动界面

STONE-STVI056WT-01-Arduino-Physical-Therapy-Instrument (1)

STONE-STVI056WT-01-Arduino-Physical-Therapy-Instrument (1)

    滚动至顶部