首页 解决方案 主机与 Smart Display 的 CANopen 通信 (按钮与指示灯控制)

主机与 Smart Display 的 CANopen 通信 (按钮与指示灯控制)

July 25,2023

介紹

主机与 Smart Display 之间的 CANopen 通信

控制 Smart Display 需要相应的系统接口和通信协议。本文从主机控制的角度出发,通过 Arduino 控制 Smart Display 的实际应用示例,介绍 HOST 如何发送命令来改变 Smart Display 上指示灯的颜色。在本示例中,UI 界面中配置了一个触摸按钮,同时 Arduino 连接一个实体按钮。按下实体按钮或触摸按钮时,屏幕上的指示灯颜色会随之改变,并同步控制外部 LED 的开启或关闭。

本应用介绍如何使用 Arduino 开发板控制 3.5 英寸 CAN Smart Display,包括如何通过程序控制实体按钮、触摸按钮、屏幕上的指示灯以及开发板上的 LED,同时说明 Smart Display 如何接收来自 HOST 的命令。本示例采用配备 CAN Bus 扩展板的 Arduino Mega 2560 作为主机控制器,并通过 CANopen 与 Smart Display 进行通信。

系统框图如下所示:

Arduino 主机与 Smart Display 之间的 CANopen 通信

系统框图

本应用需要以下组件:

  1. 3.5 英寸 CANopen Smart Display
  2. Arduino Mega 2560
  3. Arduino Mega 2560 CAN Bus 扩展板
  4. CAN Bus Dongle
  5. 实体按钮
  6. LED
  7. Smart Display GUI Builder v0.4.2 或更高版本
 

本示例分为三个部分:

  1. 在 GUI Builder 中设计项目
  2. 创建并上传项目
  3. 编写 Arduino 主机程序
 

在 GUI Builder 中设计项目

首先创建一个新项目并输入项目名称,然后选择设备类型,本示例使用 3.5 英寸设备。通信协议选择 CANopen,并将显示方向设置为 Landscape。接着在 UI 模板中选择 Blank Template,最后点击 Create 创建新项目,如下图所示。

在 GUI Builder 中创建 CANopen Smart Display 项目

完成上述设置后,将进入一个空白页面。

GUI Builder 中的空白项目页面

根据本应用示例,需要在工作区中添加一个触摸按钮和一个 Indicator Widget。从控件面板中选择所需的 Widget,并将其拖放到工作区中,如下图所示。

在 GUI Builder 中添加触摸按钮和 Indicator Widget

创建并上传项目

完成前面的设置和 UI 设计后,即可创建并上传项目。点击 GUI Builder 工具栏中的 Device,然后选择 Device Property。在 Device Property 窗口中,可以使用默认波特率(Baud Rate),也可以根据实际应用需求进行调整。请确保 Arduino 程序中设置的 Baud Rate 与 GUI Builder 中的设置保持一致。完成设置后,点击 Upload,将项目上传至 Smart Display,如下图所示。

在 GUI Builder 中创建并上传 Smart Display 项目

项目上传完成后,画面会显示“Upload project completed”。点击 OK 关闭窗口,如下图所示。

Smart Display 项目上传完成提示

上传完成后,Smart Display 将显示启动画面,如下图所示。

Smart Display 项目上传后的启动画面

启动画面结束后,Smart Display 将切换至已上传的应用页面,表示项目已成功创建并上传。

Smart Display 成功进入已上传的应用页面

编写 Arduino 主机程序

本示例使用 Arduino IDE v2.0.4 编写 Arduino 主机程序。为实现 CAN Bus 通信,程序中使用了 mcp2515_can.h 库以及其他辅助库,详细内容请参考 Arduino 程序代码。在建立主机与 Smart Display 之间的通信时,需要确认与各对象相关的地址。如需进一步了解主机与 Smart Display 之间的 CAN Bus 通信,可参考 GUI Builder 中的通信日志。Arduino IDE 程序中已定义所需的对象地址,如下图所示。

Arduino 主机程序中的 Smart Display CANopen 通信设置

在 CANopen 结构中,Button 的 index 对应于 0(0x2000),Indicator 的 index 对应于 1(0x2001)。需要特别注意每个对象对应的 index。知道对象的 index 后,即可通过 Arduino 主机程序更改该对象的状态。可从下方仿真日志表中的命令信息查看各对象对应的 index:

GUI Builder 通信日志中的 Button 对象 index

 

GUI Builder 通信日志中的 Indicator 对象 index

此处定义了各对象的数据类型(Data Type)。如需添加其他对象,也需要在程序中定义相应的数据类型。

Arduino 程序中的 CANopen 对象数据类型定义

下图说明 ObjectFunCallback 如何处理从各对象接收到的值。用户可根据实际应用需求修改程序代码,或添加其他对象的处理逻辑。

通过 ObjectFunCallback 处理 CANopen 对象接收值

当 Arduino 主机检测到实体按钮的状态发生变化时,会通过 CANopen 向 Smart Display 发送相应的值。以下程序代码可用于了解命令结构中使用的 ID 和 sub-index。此段程序会根据实体按钮的状态变化,更新 Indicator(object index 2)的值。

Arduino 主机通过 CANopen 更新 Indicator 的程序代码

在程序中定义所有对象的寄存器地址,并设置实体按钮和 LED 等外部组件的引脚模式,包括输入或输出模式,同时设置波特率,如下图所示:

Arduino 程序中的对象寄存器地址和引脚设置

Arduino 程序中的 CAN Bus 波特率设置

最后,在 loop() 中定义实现本应用场景所需的程序逻辑。当按下实体按钮或 Smart Display 上的触摸按钮时,系统会改变屏幕上 Indicator 的颜色,并同步开启或关闭外部 LED。

Arduino loop 程序中的按钮和 Indicator 控制逻辑

通过 Arduino IDE 成功验证并上传程序后,按下实体按钮或 Smart Display 上的触摸按钮,即可开启 LED,并将 Indicator 的颜色变为绿色。当 Indicator 显示为红色且 LED 关闭时,表示实体按钮和触摸按钮均未被按下,如下图所示。

通过实体按钮或触摸按钮控制 Indicator 和 LED

上述程序可通过 GitHub 链接下载。示例中还提供了与本 Demo 项目相关的其他文件和信息,可供进一步参考。实际硬件配置如下图所示。

Arduino 与 Smart Display CANopen 通信示例的实际硬件配置

完成上述步骤后,即可通过实体按钮或 Smart Display 上的触摸按钮控制屏幕上的 Indicator 状态和外部 LED,完成本次 Smart Display CANopen 通信示例。

结语

本示例介绍了 GUI Builder 的操作与应用,帮助用户了解如何通过 CAN Bus 开发主机端控制应用,以及主机如何通过发送和接收命令来控制 Smart Display。通过本示例,开发人员可以进一步了解主机与 Smart Display 之间的 CANopen 通信与控制方式,并将其作为后续 Smart Display 应用开发的参考。

对显示器解决方案有疑问?您想做的,由我们实现。 联络我们!

订阅

接收最新显示器技术知识与新品消息

联络我们

价格/规格书/一般查询

技术支持

联系我们询问技术内容

go top
联络我们
close

我们重视您的隐私

通过点击「允许所有 Cookie」,代表您同意在您的设备上存储 Cookie 以增强网站浏览体验、分析网站使用情况并协助我们的营销和网站效能优化工作。您可以在我们的隐私权政策中找到有关于此的更多信息。

我们重视您的隐私

Winstar 及部分第三方在 www.winstar.com.tw 上使用 cookies。关于 cookie 的种类、用途及相关第三方的详细信息,请参见下文及我们的《Cookie 政策》。请点击“允许全部”来同意我们使用 cookies,以确保您在我们网站上获得最佳体验。您也可以设置您的偏好或拒绝 cookies(必要的 cookies 除外)。

管理同意声明

永久启用
必要的 Cookie

这些 Cookie 是必不可少的,以便让您在浏览网站并使用其功能上有更好地体验,例如设置您的隐私偏好、登录或填写窗体。

分析 Cookie

这些也被称为「统计cookie」,用于收集您使用网站的信息,例如您访问了哪些页面以及点击了哪些连结。查看详细信息