在前面兩篇 (#1 和 #2) 中,我們已經學會如何讓 Master 送資料給 Slave,其實也可以反其道而行,Slave 也可以送資料給 Master,接下來我們就來學習怎麼做。
接線
老樣子,這兩台 Arduino 一台是 Master,一台是 Slave,其中 Slave 所用的 address 為 1。
程式
要叫 Slave 送資料給 Master 會涉及兩個動作:
- Master 必須用 Wire.requestFrom() 發出 request 給 slave
- Slave 在收到 request 後就把資料傳給 Master
底下是 Master 的程式:
程式說明:
- Master 使用 Wire.begin() 加入 I2C bus
- 在 loop() 函式中,Master 首先會用 Wire.requestFrom(SLAVE_ADDRESS, 6) 發出 request 給指定的 slave 並且要求 6 個 bytes 的資料
- 接著 Master 會用 Wire.available() 檢查有沒有收到資料,如果有就用 Wire.read() 讀取 slave 送過來的資料,然後再將資料印到 serial port 上
底下是 Slave 的程式:
程式說明:
- Slave 一樣是使用 Wire.begin() 加入 I2C bus,但是必須傳入一個參數指定所用的 address
- 利用 Wire.onRequest(requestEvent) 註冊事件,之後當 Master 發出 request 給 Slave 時,Arduino 就會自動呼叫 requestEvent()
- 在 requestEvent() 中,Slave 做的事很簡單,只是把 "hello\n" 這 6 個 bytes 的資料傳給 Master 而已
執行結果
把兩支程式上傳到兩塊 Arduino 板子上後,打開 Master 的 Serial Monitor,你就會看到 Serial Monitor 上每 1 秒鐘會出現一行 "hello":
0 意見:
張貼留言