2011年12月23日 星期五

多台 Arduino 間的通訊 - 透過 I2C #2

我們在前一篇已經學會使用 I2C 建立 Arduino 間的通訊,接著再來做個簡單練習: 把 Blink 範例做個改良,讓兩台 Arduino 的 LED 可以交替閃爍。

接線

image

接線方法跟前一篇一樣,只不過這次在兩台 Arduino 的 pin 13 都加了一顆 LED。

老樣子,這兩台 Arduino 一台是 Master,一台是 Slave,其中 Slave 所用的 address 為 1。

程式

底下是 Master 的程式:

程式說明:

  • Master 使用 Wire.begin() 加入 I2C bus
  • 在 loop() 函式中,程式分成兩個步驟,第一個步驟是讓 Master 自己的 LED 閃爍一下,LED 開關的間隔時間預設是 400 ms;第二個步驟 Master 會要求 Slave,叫 Slave 讓自己 的 LED 也閃爍一下
  • slaveLED() 函式則是負責透過 I2C 把資料送給 Slave,其中 value 變數裏的內容代表的是 LED 開關的狀態

底下是 Slave 的程式:

程式說明:

  • Slave 一樣是使用 Wire.begin() 加入 I2C bus,但是必須傳入一個參數指定所用的 address
  • 利用 Wire.onReceive(receiveEvent) 註冊事件,之後當 Master 送資料給 Slave 時,Arduino 就會自動呼叫 receiveEvent()
  • 在 receiveEvent() 中,Slave 會從 I2C 讀取資料,然後根據收到的資料決定要開啟或是關閉 LED
示範影片


▲ 接上 Master 的 I2C 後,Master 和 Slave 上的 LED 開始交替閃爍

參考資料

0 意見: