首頁 解決方案 主機與 Smart Display 的 CANopen 通訊 (按鈕與指示燈控制)

主機與 Smart Display 的 CANopen 通訊 (按鈕與指示燈控制)

July 25,2023

介紹

主機與 Smart Display 之間的 CANopen 通訊

控制 Smart Display 需要系統介面與通訊協定。本文將從客戶端控制的角度出發,透過 Arduino 控制 Smart Display 的實作範例,說明 HOST 如何發出命令改變 Smart Display 中指示燈的顏色。範例情境是在 UI 中配置一個觸控按鈕,並連接一個實體按鈕;按下實體按鈕或觸控按鈕時,將改變螢幕上指示燈的顏色,並開啟或關閉外部 LED 燈。

本應用將說明如何透過 Arduino 開發板控制 3.5 吋 CAN Smart Display,包括透過程式控制實體按鈕、觸控按鈕、螢幕上的指示燈及載板上的 LED,以及 Smart Display 如何接收來自 HOST 端的命令。本範例使用具備 CAN Bus 介面的 Arduino Mega 2560 開發板作為控制主機,透過 CANopen 與 Smart Display 進行通訊。

應用系統方塊圖如下所示:

1-1-simulation

系統方塊圖

本應用需要以下元件:

  1. 3.5 吋 CANopen Smart Display
  2. ARDUINO Mega 2560
  3. ARDUINO Mega 2560的CAN Bus載板
  4. CAN Bus Dongle
  5. 實體按鈕
  6. LED
  7. 軟體GUI-Builder v0.4.2或更高版本
 

這個示範分為三個部分:

  1. 在GUI Builder中設計專案
  2. 建立和上傳專案
  3. 編譯 Arduino 主機
 

以 GUI Builder 設計專案

首先建立一個新專案並輸入專案名稱,接著選擇裝置類別,本應用選擇 3.5 吋裝置。通訊協定選擇 CANopen,顯示方向設定為橫向模式。接著在 UI 範本中選擇空白範本,最後點選 Create 按鈕建立新專案,如圖所示。

02-design-the-demo-project-in-gui-builder

完成上述設定後,會進入一個空白頁面。

02-design-the-demo-project-in-gui-builder-1

 

根據此應用範例,需要在工作區新增一個觸控按鈕和一個指示燈物件。從控制元件區選取所需物件,並拖曳至工作區即可,如圖所示:

02-design-the-demo-project-in-gui-builder-2

 

建立並上傳專案

完成前述設定與介面設計後,即可建立並上傳專案。點選 GUI Builder 工具列上的「Device」,並選擇「Device Property」。在「Device Property」視窗中,可使用預設的傳輸速率(Baud Rate),或依應用需求進行調整。請確認 Arduino 程式與 GUI Builder 中設定的 Baud Rate 相同。完成設定後,點選「Upload」按鈕,將專案上傳至 Smart Display,如下圖所示:

03-build-and-upload-the-project

專案上傳完成後,畫面會顯示「Upload project completed」。點選「OK」按鈕關閉視窗,如下圖所示:

03-build-and-upload-the-project-1-1

上傳完成後,Smart Display 將顯示開機畫面,如下圖所示:

03-build-and-upload-the-project-2-1

開機畫面結束後,Smart Display 將切換至已上傳的操作頁面,表示專案已成功建立並上傳:

03-build-and-upload-the-project-3-1

編譯 Arduino 主機

Arduino 整合開發環境版本“IDE v2.0.4”用於 Arduino 編碼。 為了實現CAN bus通訊協定,程式中使用了mcp2515_can.h函式庫和其他一些輔助庫。有關更多細節,請參閱Arduino程式碼。其中要注意連接主機和SmartDisplay的位址。如果您想瞭解有關主機和SmartDisplay之間如何通過CAN bus通訊的詳細資訊,請參考GUI Builder通訊欄。在Arduino IDE程式中,所有必需的寄存器位址都已定義,如下圖所示:

04-program-the-arduino-host

在 CANopen 結構中,Button 的 index 對應於 0(0x2000),Indicator 的 index 對應於 1(0x2001)。進行 Arduino 主機程式開發時,需要確認各物件對應的 index;知道物件的 index 後,即可透過 Arduino 主機程式變更物件狀態。可從 GUI Builder 通訊紀錄中的命令內容確認物件所對應的 index,如下圖所示:

04-program-the-arduino-host01-1

 

04-program-the-arduino-host01-2

這裡定義了物件的資料類型。如果使用者想要新增更多的物件,則需要在這裡定義其資料類型:

04-program-the-arduino-host02

下圖說明如何透過 ObjectFunCallback 處理各物件接收到的值。使用者可依應用需求在此程式碼中修改或新增其他物件的處理方式。

04-program-the-arduino-host03

 

當Arduino主機從實體按鈕接收到值的變更時,它將通過CAN 訊號向SmartDisplay發送特定的值。請參考以下程式來了解“command structure ids and sub-indexes”。這段程式的目的是根據從實體按鈕更改的值來更新指示燈(object index 2)的值。

04-program-the-arduino-host04

在Arduino IDE程式中,您需要定義物件的寄存器位址、接腳模式和外部配件的設置,例如實體按鈕和LED接腳的輸入或輸出,以及設定鮑率。

04-program-the-arduino-host05-1

04-program-the-arduino-host05-2

最後,在 loop() 中定義執行此應用情境所需的程式邏輯。按下實體按鈕或 Smart Display 上的觸控按鈕時,系統會改變螢幕上 Indicator 的顏色,並同步開啟或關閉外部 LED。

04-program-the-arduino-host06

透過 Arduino IDE 成功驗證並上傳程式後,按下實體按鈕或 Smart Display 上的觸控按鈕,即可開啟 LED,並將 Indicator 顏色變更為綠色。當 Indicator 顯示紅色且 LED 關閉時,表示實體按鈕與觸控按鈕皆未被按下,如下圖所示:

05-appendix-set-up-the-project

上述程式可從 GitHub 連結下載,並可參考範例中的相關檔案進一步了解此 Demo 專案。實際硬體配置如下圖所示:

05-appendix-set-up-the-project01

完成上述設定後,即可透過按下實體按鈕或觸控按鈕來更改螢幕指示燈與LED狀態來完成SmartDisplay的範例。

結語

本文透過實際範例介紹 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」,用於收集您使用網站的資訊,例如您訪問了哪些頁面以及點擊了哪些連結。查看詳細資訊