QWIIC透明OLED HUD连接指南

_
贡献者: 英国龙
喜爱的 最喜欢的 0

介绍

清晰的屏幕不再是科幻世界的东西了!这个QWIIC透明OLED HUD平视显示器)是Spa亚博官网rkfun对所有未来派透明平视显示器需求的答案。你可以透过显示器看到,每个部分是区域着色,也就是说,虽然没有一个片段可以改变颜色,显示屏上有不同颜色的部分。

亚博官网Sparkfun透明OLED HUD突破(QWIIC)

亚博官网Sparkfun透明OLED HUD突破(QWIIC)

液晶显示器-15079
99.95美元

所需材料

要遵循本教程,你需要以下材料。但你可能并不需要一切,这取决于你拥有什么。把它加入你的购物车,通读指南,并根据需要调整推车。

微控制器

透明OLED HUD需要相当多的RAM,所以你需要一个至少有5500字节RAM的微控制器来控制一切。查看下面的一些可能选项。

亚博官网Sparkfun ESP32东西

亚博官网Sparkfun ESP32东西

DEV-13907型
21.95美元
60
Arduino Mega 2560 R3型

Arduino Mega 2560 R3型

DEV-1061
38.95美元
53
青少年3.6

青少年3.6

DEV-14057型
29.25美元
13
亚博官网Sparkfun ESP8266 Thing-开发板

亚博官网Sparkfun ESP8266 Thing-开发板

WRL 13711
16.95美元
六十九

电缆

现在要进入Qwiic生态系统,关键是使用QWIIC屏蔽来匹配您对微控制器的偏好。在本教程中,我们将使用QWIIC到面包板适配器电缆。您还需要一条电缆将代码上传到您的微控制器。

USB电缆A到B-6英尺

USB电缆A到B-6英尺

驾驶室-00512
3.95美元
1个
QWIIC电缆-电路板跳线(4针)

QWIIC电缆-电路板跳线(4针)

prt-14425号
1.50美元

建议阅读

如果你不熟悉QWIIC系统,我们推荐阅读这里概述一下.

QWIIC连接系统
QWIIC连接系统

如果您不熟悉以下教程,我们还建议您查看它们。

串行通信

异步串行通信概念:数据包,信号电平,波特率,UART等等!

I2c

I2c简介,目前使用的主要嵌入式通信协议之一。

串行终端基础知识

本教程将向您展示如何使用各种终端仿真器应用程序与串行设备通信。

硬件概述

首先,让我们看看我们正在处理的QWIIC HUD的一些特性,所以我们知道在董事会之外会发生什么。

特性 范围
工作电压 1.65伏-3.3伏
电源电流 400毫安
C地址 0.30秒,0x31

请注意,OLED可以拉动约400 mA的电流,所以确保你有足够的电源,尤其是如果OLED不是你唯一的电源。也注意到OLED位于两个i上C地址,所以确保其他任何我C设备不占用地址0.30秒0x31.

别针

下表列出了所有透明OLED的管脚及其功能。

别针 说明 方向
接地 接地
3.3伏 功率
SDA公司 数据 双向
症状自评量表 时钟

可选功能

透明OLED分接头具有上拉电阻,连接至IC总线;如果在启用上拉电阻的情况下将多个传感器连接到总线上,并联等效电阻会产生很强的上拉,使总线无法正常工作。作为一般经验法则,如果多个设备连接到总线上,禁用除一对上拉电阻以外的所有电阻。如果需要断开上拉电阻,可以通过切割痕迹在下面突出显示的相应跳线上。

上拉跳线

上拉跳线

板载LED(下面突出显示)将点亮时,板电源。

电源LED

电源LED

五金件装配

透明OLED HUD需要相当多的RAM(大约5500字节),因此您需要连接到IC针直接连接到没有QWIIC屏蔽的设备。将黄色连接到SCL,SDA蓝色,红色至3.3V,黑色至接地,使用QWIIC跳线适配器电缆连接至板的各个插脚。在这种情况下,我们把电路板连接到Arduino Mega 2560的IC针.

连接到Mega

连接到Arduino Mega的透明OLED HUD

图书馆概况

注:此示例假定您正在桌面上使用最新版本的Arduino IDE。如果这是你第一次使用Arduino,请回顾我们的教程安装Arduino IDE。如果您以前没有安装过Arduino库,请查看我们的安装指南。

第一,你需要亚博官网Sparkfun透明OLED HUDArduino图书馆。您可以通过Arduino库管理器获取此库。寻找亚博官网Sparkfun WiseChip抬头显示器安装最新版本。如果您喜欢从Github存储库手动安装,你可以在这里抓到它们:

在我们开始画草图之前,让我们来看一下我们可以用来控制透明HUD上的段的所有功能。下面的代码初始化罗盘圆中各个部分的功能(ccx()功能),指南针箭头(d0x()。功能),胎压指示,目的地距离(H01()。K01()。M01()。几个小时,公里,和米)转弯距离(K02()。M03-()公里和米)手机和TPMS图标(p0x()。T0x())最后,这个1个在速度表和罗盘上(S01_条()s15_条())。您不需要使用这些功能中的大部分,因为大多数都用于更高级的功能,比如设置速度计(),但我们还是给了你访问这些部分的权限。打开任何segmetn都很简单,只需使用参数1个.打电话0将关闭它。

语言:CVOID D01(uint8-t动作);void CC1(uint8-t动作);void D02(uint8-t动作);void CC2(uint8-t动作);void D03(uint8-t动作);void CC3(uint8-t动作);void D04(uint8-t动作);void CC4(uint8-t动作);void D05(uint8-t动作);void CC5(uint8-t动作);void D06(uint8-t动作);void CC6(uint8-t动作);vovoid CC6(uint8-t 8-t动作);void D07;void D07 7 7 7 7 7 7 7(0 7-7-7-(uint8_t action);作废cc7(uint8_行动);无效D08(uint8采取行动);无效CC8(uint8采取行动);无效D0X(uint8采取行动);无效C01(uint8采取行动);无效C02(uint8采取行动);无效H01(uint8采取行动);无效K01(uint8采取行动);无效M001(uint8采取行动);无效C03(uint8采取行动);无效K02(uint8采取行动);无效M03(uint8采取行动);无效C03(uint8采取行动);无效K02(uint8采取行动);无效M03(uint8采取行动);无效D0X X(uint8采取行动);无效P01(uint8采取行动);无效C01(uint8采取行动);无效C01(uint8采取行动(uint8_t action);作废p03(uint8_t action;void t01(uint8_t action);void t02(uint8_t action);void s11_bar(uint8_t action);void s15_bar(uint8_t action);

高级功能

透明OLED的可用功能在下图中更容易看到。

分段图

段图。单击放大。

以下所有函数都将根据传递给它们的参数设置一组段

  • 空心圆规圆(uint8_t select);
    • 0全部关闭
    • 1-8岁:除选定项外,全部关闭
    • :全部打开
    • 10-17:除选定项外,所有项都打开
  • 空心圆规箭头(uint8_t select);---同指南针。
  • 作废RadardistanceUnits(uint8_t action);---打开雷达距离。
  • 无效标志(uint8_t action);---打开标志段。
  • 无效轮胎压力警报(uint8_t action);---显示TPMS文本。
  • 空白speedometerUnits(uint8_t行动);---显示km/h段。
  • 空的destinationDistanceUnits(uint8_t iconunits);
    • 0:空白
    • 1个:h
    • :M
    • 公里
  • 空转弯距离单位(uint8_t iconunits);
    • 0:空白
    • 1个:M
    • 公里

以下功能显示道路及隧道段,通过1打开段。

  • 清空LeftTunnel(uint8_t action);
  • 空的中间隧道(uint8_t action);
  • 无效的righttunnel(uint8_t action);
  • 清空LeftRoad(uint8_t action);
  • 空的中间道路(uint8_t action);
  • 无效的右路(uint8_t action);

以下功能将打开相应的导航段

  • void nav_group(uint8_t action);---触发整个导航组
  • 无效的导航保持(uint8)动作;
  • 空导航左转弯(uint8动作);
  • 无效的导航右转弯(uint8动作);
  • 无效的导航权(uint8行动);
  • void nav_hardleft(uint8_t action);
  • 无效导航(uint8)动作;
  • 无效导航权(uint8行动);
  • 无效导航连续光(uint8-t行动);
  • 无效导航优先权(uint8 t action);

  • 空Radardetector(uint8_t level);

    • 0:无雷达枪图标
    • 1个:仅雷达枪
    • 2-8岁:测距仪
  • 无效设置航向(uint8_t speedno);---设定指南针的方向。最多不会超过199。
  • 空的setdestinationDistance(uint16_t speedno,uint8_t模式);---设置目标段中的距离。最大999。
  • 无效的setradardistance(uint16_t speedno,uint8_t模式);——Set是雷达段的距离。最大999。
  • 无效设置禁用(uint16_t speedno,uint8_t模式);---设定转弯距离。最大999。
  • 空隙设置压力(uint8_t speedno,uint8_t模式);---设置轮胎压力。最大值99
  • 空位设定速度计(uint8_t speedno);---设置速度表。最多不会超过199。
  • 空的setcallicon(uint8_t iconstatus);

    • 0:空白
    • 1个:大纲
    • :大纲+电话
    • :所有段
  • 空清除所有(空);---清除所有段。

示例代码

既然我们已经安装了库,并且了解了基本功能,让我们运行一些Qwiic透明OLED HUD的例子来看看它的行为。

示例1-所有段

要开始第一个示例,打开文件>示例>自定义库中的示例>亚博官网Sparkfun WiseChip抬头显示器>示例1所有段.在这个例子中,我们首先创建一个威斯奇福德调用的对象穆胡德然后在设置()循环。执行此操作的代码如下所示。

语言:C包括
           
            wisechiphud myhud;void setup()myhud.begin();
           

一旦我们初始化了HUD,我们可以开始打开段。主循环简单地遍历并调用所有可用的函数。

语言:cvoid loop()myhud.clearlall();//清除所有段/*************************************Compass Group***************************/MyHud.CompassicCircle(9);//0=全部关闭;1-8=除所选外全部关闭;9=全部打开;10-17=除所选MYHUD.指南针箭头(9)外,所有开关都打开;//0=全部关闭;1-8=除所选外全部关闭;9=全部打开;10-17=除所选myhud.setheading(188)之外的所有打开;//max 199/*****************************************雷达探测器组*************************/myhud.radar detector(8);//0=无雷达枪图标;1 =雷达炮;2-8=距离表myhud.setradardistance(888,0);//最大999 myhud.radardistanceUnits(1);//0=空白;1=“m”/************************************目的地/航点组******************************/myhud.flag(1);//0=空白;1=标志图标myhud.setdestinationDistance(888,2);//最大999 myhud.destinationDistanceUnits(3);//0=空白;1=“h”;2=“m”;3=“km”myhud.h01(1);//0=空白;1=“H”/*****************************************退出组******************************/myhud.lefttunnel(1);//0=空白;1=隧道;还可以尝试leftroad();中隧道(1);//0=空白;1=隧道;还可以尝试midderroad();Myhud.右隧道(1);//0=空白;1=隧道;还可以尝试rightroad();/**************************导航组******************************/myhud.nav_组(1);//0=关闭整个导航组;1=myhud.setturdistance上的整个导航组(888,1);//最大999 myhud.turn距离单位(2);//0=空白;1=“m”;2=“km”//turn groups://nav_keepleft(1);//左转导航(1);//nav_hardleft(1);//导航(1);//导航连续光(1);//导航优先(1);//导航右转弯(1);//nav_hardright(1);//导航灯(1);/**************************呼叫组******************************/myhud.setcallicon(3);//0=空白;1=轮廓;2=大纲+电话图标;3=所有段/**********************************TPMS组***************************/MyHud.TirePressureAlert(3);//0=空白;1=“胎压监测系统”;2=“轮胎”;3=所有段myhud.settirepressure(88,1);//max 99/*****************************************速度表组*************************/myhud.setspeedommeter(188);//最大199 myhud.speedometerUnits(1);//0=空白;1=“km/h”延误(5000);myhud.clearlall();//清除(1){}时的所有分段;

如果你还没有,选择Arduino/Genuino Mega 2560或Mega2560作为董事会,它枚举的COM端口,点击上传!OLED应该像下面的GIF。

示例1输出

示例1输出

示例2-动画图标

在第二个示例中,我们将制作显示片段的动画。要开始第二个示例,打开文件>示例>自定义库中的示例>亚博官网Sparkfun WiseChip抬头显示器>示例2动画图标.我们初始化hud的方法与第一个示例中的方法完全相同。然后,我们继续使用对于循环以循环遍历一组分段的每个可能状态,以使其成为动画。每个循环从0开始,并转到该特定段组的最大选项数。每个循环都有一个很小的延迟,以允许帧之间有一段时间。我们这样做是为了指南针,雷达,电话和TPMS图标。我们在一组片段的每个动画之间清除整个HUD,以确保一次只显示一组。实现这一点的代码如下所示。

语言:cvoid loop()myhud.clearlall();//清除(int j=0;j<2;j++)用于(int i=1;i<9;i++)myhud.圆规圈(i);延迟(50);}}对于(int j=0;j<2;j++)用于(int i=10;I<18;i++)myhud.圆规圈(i);延迟(50);}}myhud.圆规圆(0);对于(int j=0;j<2;j++)用于(int i=1;i<9;i++)myhud.指南针箭头(i);延迟(100);}}对于(int j=0;j<2;j++)用于(int i=10;I<18;i++)myhud.指南针箭头(i);延迟(100);}}myhud.指南针箭头(0);对于(int i=0;i<5;i++)myhud.radardetector(1);延迟(100);myhud.radardetector(0);延迟(100);}Myhud.RadardistanceUnits(1个);对于(int j=800;j>=0;j=j-10)myhud.setradardistance(j,0);myHUD.radarDetector(j / 100);}myhud.clearlall();对于(int j=0;j < 5;j++)用于(int i=0;i<4;i++)myhud.setcallicon(i);延迟(100);}}myhud.setcallicon(0);轮胎压力警报(3);myhud.设定压力(30,1);延迟(2000年);对于(int j=30;J>14;j——)myhud.settirepressure(j,1);延迟(随机(1001000));}对于(int j=0;j<10;j++)用于(int i=1;i<3;i++)myhud.轮胎压力警报(i);延迟(100);}}轮胎压力警报(3);myhud.clearall();同时(1)

如果你还没有,选择Arduino/Genuino Mega 2560或Mega2560作为董事会,它枚举的COM端口,点击上传!上传代码后,透明的HUD应该看起来像下面的GIF。

示例2输出

示例2输出

例3-计数

在第三个示例中,我们会让每个可用的数字显示数到200。要开始第三个示例,打开文件>示例>自定义库中的示例>亚博官网Sparkfun WiseChip抬头显示器>示例2动画图标.在这个例子中,我们按照前面两个示例中的方法初始化OLED。然后,在我们的空循环(),我们清理了抬头显示器,然后开始对于循环计数5秒。我们将索引变量的值写入每个段。实现这一点的代码如下所示。

语言:cvoid loop()myhud.clearlall();//清除所有段,同时(1)为(int i=0;i<200;i+=5)myhud.setheading(i);//最大199 myhud.setradardistance(i,0);//最大999 myhud.setdestinationDistance(i,(二)//最大999 myhud.setturndistance(i,1)的规定;//最大999 myhud.settirepressure(i,1)的规定;//最大99 myhud.setspeedometer(i);//最大199延迟(200);}myhud.clearlall();}

如果你还没有,选择Arduino/Genuino Mega 2560或Mega2560作为董事会,它枚举的COM端口,点击上传!上载此代码会使OLED看起来像下面的GIF。注意TPMS的编号是如何停止在99。这是这些函数如何处理越界数的演示。

示例3输出

示例3输出

资源和进一步发展

现在您已经成功地启动并运行了Qwiic透明OLED HUD连接指南,是时候把它纳入你自己的项目了!亚博官网

更多信息,查看以下资源:

下一个项目需要一些灵感吗?亚博官网查看以下一些相关教程:

微型OLED分接连接指南

亚博在线娱乐官网了解如何将微型OLED突破连接到Arduino。然后绘制像素,形状,所有的文字和位图!

Microview连接指南

一个快速教程,让您启动和运行与您的MicroView开发板。

TensyView连接指南

使用TeensyView OLED板显示文本和图形的指南。

灵活的灰度OLED连接指南

了解如何在新的灵活OLED屏幕上显示图像。