SIMHUB Arduino DIY 数码管显示型模拟赛车仪表-软件配置方法及说明

问题:近几天自制了一个4功能型arduino模拟赛车仪表,在找资料的过程中,发现大佬们都是展示了一下成品,然后说怎么向arduino烧录功能程序,但是还差一步:如何在软件设置中,让挡位、发动机转速、车速、发动机转速百分比等信息如何显示到正确的数码管及LED灯条上。本文结合我设置过程中的体会,做一番说明,作为该软件后继功能的记录,也希望能帮到自己DIY的其他朋友。

一、硬件及软件情况

如下图,是我自己在某宝购买的成品组件搭建的工程样机。

1. 主要构成部件:

Arduino nano 板  1pcs

MAX7219 单色LED阵列屏8x8   1pcs

MT1637 0.56" 4位-7段数码管    1pcs

MT1637 0.36" 6位-7段数码管    1pcs

WS2812 8位LED灯条                 1pcs        ### 后继要加到2pcs,形成16位显示

PCB端子 5mm间距 2P型            1pcs       ### 主要是将5v和 GND 引脚扩展出来,每个都要接

2. 软件

没什么好说的  SIMHUB, 自己搜索下载就可以了。可能在第一次设置 “My Hardware”,点击 “Open arduino setup tool”的时候需要一些魔法,否则需要的 SimHub.ArduinoIDE.1.0.0.7z 这个东西很可能下载不成功。

3.关于组装

这里参见官方提供的说明即可。 引脚从 D2-D13 都可以用,作为 DIN 和CLK 都可以,只要后继在软件中选对引脚的功能就好了。

注:稍微说一下总体流程。 采购组件→焊接引线→插接组装→开SIMHUB识别Ardunio→开启接入的显示单元类型→确认插接的引脚序号→确认并烧录进Ardunio→软件中配置信息的显示区域和类型

二、先配置Arduino,让每块显示单元和板子绑定

2.1如下图所示,先点击左侧的 Arduino选项,再点最右侧的 “My Hardware”,

 参考官网: Arduino Setup · SHWotever/SimHub Wiki · GitHub

2.2 打开配置工具后,在对应的设备中开启.  按加号,加1 以及将 OFF 切换为 ON

 2.3 烧录。 主要是选对板子和对应的接口。 

三、让需要的信息显示在正确的屏幕上

这一点有难的,也有简单的。我们由易到难

3.1 挡位显示

这个比较简单,一般都是直接默认在 Martix 屏,也就是矩阵屏中显示,不用过多的调整,仅需要调一下亮度,在使用的时候看显示方向是否正确,是否要旋转一下。

因为我们使用的是 MAX7219 单色LED阵列屏,直接在 “Display&Alerts”中调节就可以了。图中 “SINGLE COLOR MATRIX GEAR INDICATOR",就是 单色矩阵档位指示器。 下方的+-号是调节亮度的。

右侧的”SEVEN SEGMENT MODULES",这个是调整数码管显示单元的,我们有两个,所以#1,#2 可以调,也是调节亮度,顺便看一下两个屏的顺序。 我的是 #1为4位的,#2为6位的。 注意后面的 Reverse display 是让字符反转显示的。一般小数点在下方是正显。       3.2 直接的 ws2812B 8x8 矩阵板显示屏 

   

 这种屏是RGB三色的,调整项比较多,官方也有教程

Arduino RGB Matrix · SHWotever/SimHub Wiki · GitHub

配置界面是从左往右第2个

3.3    LED灯条的配置

在绑定显示单元到Arduino中时,leds count 一定不要忘记填,我们这里是8位,就填8。 最开始配置只填写了1,结果只有1颗亮,还以为灯条有问题,花费了不少时间。

配置截面在最左侧第1个

要注意,有用的灯效才打开,也就是该配置的右上角显示绿色。 上图中的RPMS 是点击 Add effect 新加的。  主要是设置从第几颗灯开始亮,以及分成几个阶段,每段的显示灯珠数量、颜色,还有在引擎转速达到百分之多少时亮那个段的灯。

官方教程: LED Editor guide · SHWotever/SimHub Wiki · GitHub

四、数码管显示内容的配置

这一部分单独拿出来讲,因为比较繁琐

4.0 这是修改后的步骤,4.1→4.5是最开始写的,逻辑有些不清,但也可以看。

4.0.1 如下图位置,可以增加一个新的屏幕配置项,并将其命名为自己喜欢的名称。也就是说,我们的两块数码管屏,都在这个配置项内配置,为其配置内容。

4.0.1双击点开你要编辑的屏幕配置的名称,开始配置。

先点击 0,“Display4F-module 1” ;→然后点击 1 ,ADD,增加要显示的内容;→点击2,“SimHub Property”,从SimHub中链接一个信息到当前编辑的屏幕;→点击3,PICK弹出可选属性参数的对话框;→点击4,输入参数的关键字,比如 time;→点击5,也就是我们找到的要添加的信息;→点击6,ok,对话框结束,在7的位置出现我们选择显示的内容的🔗链接名称;→点击8,Save,保存配置结果

 4.0.3 显示位数的设定

因为这个配置项是针对 TM1637芯片驱动的数码管的,一般默认是4位,而我们有一个6位的,因此要调节显示的位数的信息。例如下图中,我们对6位的数码管进行了年、月、日信息的配置。

先点击我们要配置的数码管,1 处;→再点击🔗名称,这样3的整个区域才会显示;→点击4处的+,增加到6;→再配置5,设置格式,可以手动输入,这里 yy.MM.dd 就是年月日,其他属性的参数可能格式不一样;第6处,选中表示字符从右往左显示;点击上一步中的  8 Save保存,即可

 我的配置结果的图, 6位管显示的是24年04.08;4位管显示的是当前时间 10.07

4.0.4  如何让配置完成的配置项起效。

首先在配置项的上方选上 Ingame screen  和Ldle screen,游戏内和游戏外使用该配置

其次,也是真正起效的,在配置完成后,将你想要起效的 配置项拖动到最上方,使其名称前面显示一个很短的绿色竖条,即表示当前的配置项起作用。

小技巧:增加一个新的空配置项,命名为 Empty,什么都不配置,只打开Ldle screen,然后 Save,将其拖到最上方起效。可以让两个数码管什么都不显示,起到节能和延长使用寿命的目的。

********************以下为旧版的说明,也有一定的参考价值******************** 

4.1 软件内置了多个效果,一般是 TimeScreen,我们这里不是要显示时间,而是要显示车速和发动机转速,所以,点击配置单元右侧的 New Screen, 添加一个新 屏,将其命名为 Speed 

4.2 双击打开新添加的屏,将上方的 ingame screen, ldle screen 都调成绿色,起效。 也记得将其他不用的屏的该项,调整为灰色。

下面是我添加过内容的,可以看到,第1个屏,有一个🔗 符号,显示 SpeedLocal,表示显示本地速度。第2个屏则显示Rpms,也就是发动机转速。

 第1块 4位屏显示的内容

第2块 6位屏 显示的内容

4.3 如何添加这些信息?

假设我们还有第3块屏,则选往下的第3个方框(Display4F-module 3),点击ADD 是添加显示数据,点击 REMOVE SELECTED ,表示删除选中的带有🔗符号的数据内容。

 4.4 在上面的步骤中点击 ADD,弹出下面的选项,输入你要的关键字,选定,ok,最后 Save

 4.5 根据自己的设备的屏幕顺序,多实验几次,找到合适的。

 五、其他的配置 LCD屏等

5.1 下图中的 TM1638 Leds 是另外一种数码管显示模块,因为我没有采用,所以也无从配置。可以看官方教程:Arduino Tm1638 Display Wiring · SHWotever/SimHub Wiki · GitHub

 5.2 下图中显示的是如何配置可显示的发动机最高转速的

5.3 下图是配置 20x4 分辨率 的 LCD屏模块的。

官方教程: Arduino 20x4 or 16x2 I2C LCD · SHWotever/SimHub Wiki · GitHub 

  • 10
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用以下代码实现: ``` int digits[] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F, 0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71}; // 数码管显示的十六进制数值 void setup() { for(int i=2; i<=9; i++) { pinMode(i, OUTPUT); // 设置数字引脚为输出 } } void loop() { for(int i=0; i<16; i++) { // 循环显示0-F for(int j=2; j<=9; j++) { // 显示到8位数码管上 digitalWrite(j, HIGH); // 点亮该数码管 delay(10); // 等待一段时间 digitalWrite(j, LOW); // 熄灭该数码管 delay(10); // 等待一段时间 digitalWrite(j, HIGH); // 再点亮该数码管 digitalWrite(10, digits[i] & 0x01); // 数码管1显示该数值的最低位 digitalWrite(11, (digits[i] >> 1) & 0x01); // 数码管2显示该数值的次低位 digitalWrite(12, (digits[i] >> 2) & 0x01); // 数码管3显示该数值的第三位 digitalWrite(13, (digits[i] >> 3) & 0x01); // 数码管4显示该数值的最高位 delay(100); // 等待一段时间 } } } ``` 这段代码定义了一个数组 `digits`,它包含了0-F每个数字对应的十六进制数值。然后在 `setup()` 函数中,我们将引脚2-9设置为输出模式。在 `loop()` 函数中,我们通过两层循环来控制数码管的显示,外层循环控制0-F的循环显示,内层循环控制数码管的显示。在每次循环中,我们先点亮该数码管,然后利用 `digits` 数组来控制每个数字在数码管上的显示,最后等待一段时间后熄灭该数码管,进入下一次循环。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值