Professional Documents
Culture Documents
Arduino主從機之間的I2C通訊實驗
Arduino主從機之間的I2C通訊實驗
通過這個實驗把主從機之間的雙向通訊都詮釋出來了。
實驗全景圖:
把雙 Arduino 控制器的 SCL 和 SDA 以及 GND 三根引腳用杜邦線相連,如果
不是兩個 Arduino 分別獨立供電,您就要把雙 Arduino 控制器的 VCC 也連一起,
它們共用一個電源。這次實驗就是把這四根線 SCL 和 SDA 以及 GND、VCC 都互
連起來了。Arduino 的 SCL 引腳位於模擬埠 5,SDA 引腳位於模擬埠 4。
x++;//變數 x 加 1
if(x==2)//如果變數 x 的值為 2,則把 x 值轉為 0
x=0;
delay(1000);//延時 1s
把資料包的最後一個位元組,再上傳回主機
*/
#include 《Wire.h>//聲明 I2C 庫檔
int x;//變數 x 值決定主機的 LED 是否點亮
//初始化
void setup()
{
Wire.begin(4); // 加入 i2c 匯流排,設置從機位址為 #4
Wire.onReceive(receiveEvent); //註冊接收到主機字元的事件
Wire.onRequest(requestEvent); // 註冊主機通知從機上傳資料的事件
Serial.begin(9600); //設置串口串列傳輸速率
}
//主程序
void loop()
{
delay(100);//延時
}
// 當從機接收到主機字元,執行該事件
void receiveEvent(int howMany)
{
while( Wire.available()>1) // 迴圈執行,直到資料包只剩下最後一個字
元
{
char c = Wire.receive(); // 作為字元接收位元組
Serial.print(c); // 把字元列印到串口監視器中
}
//接收主機發送的資料包中的最後一個位元組
x = Wire.receive(); // 作為整數接收位元組
Serial.println(x); //把整數列印到串口監視器中,並回車
}
//當主機通知從機上傳資料,執行該事件
void requestEvent()
{
//把接收主機發送的資料包中的最後一個位元組再上傳給主機
Wire.send( x); // 回應主機的通知,向主機發送一個位元組資料
}
我通過這次 I2C 通訊實驗把這 10 個 Arduino 的 I2C 通訊命令全部應用到了,
仔細看實驗程式注釋,並實踐一次,就可以瞭解這 Arduino 控制器的 I2C 命令
如何應用了。
來源程式請下載:程式.zip