官术网_书友最值得收藏!

4.10 Arduino I2C

I2C是Inter-Integrated Circuit的縮寫,是一種兩線接口。I2C只是用兩條雙向的線,一條Serial Data Line(SDA),另一條Serial Clock(SCL)。

SCL:上升沿將數據輸入到每個EEPROM器件中;下降沿驅動EEPROM器件輸出數據(邊沿觸發)。

SDA:雙向數據線,為OD門,與其他任意數量的OD與OC門成“線與”關系。

I2C的一個總線上可以掛多個設備(傳感器),設備之間直接通過ID進行區分,同一個總線上只能有一個主設備,可以有多個從設備,通信只能從主設備發起,不能從從設備發起。速率方面常用的有9.6Kbps、1.92Kbps、1.152Kbps。

在某些情況下,設置兩個(或更多)Arduino板彼此分享信息是有幫助的。在下面的例子中,兩板程序通過I2C同步串行協議和對方通信,作為一個主讀/從發配置。

I2C總線是由數據線SDA和時鐘SCL構成的串行總線,可發送和接收數據。在兩個設備之間可以進行雙向傳送。各種被控制設備均并聯在這條總線上,總線上的每個設備模塊都有唯一的地址,在信息的傳輸過程中,I2C總線上并接的每一模塊電路既可以是主設備又可以是從設備,這取決于它所要完成的功能。本例的接線如圖4-9所示。

圖4-9 Arduino開發板I2C通信接線

主控板的代碼如下:

從控板的代碼如下。

Arduino中的Wire庫主要函數說明如下:

(1)Wire.begin()和Wire.begin(address):初始化Wire庫,并且加入到I2C網絡,前者作為Master,后者作為Slaver,其中參數address為7位的器件地址(可選),如果沒有輸入,則以Master的形式加入到I2C網絡。

(2)Wire.requestFrom():主設備請求從設備一個字節,這個字節可以被主設備用read()或available()接受,有兩種形式:Wire.requrstFrom(addtess,quantity)和Wire.requrstFrom(addtess,quantity,stop)。

參數:addtess表示7位的器件地址;quantity表示請求得到的數量。

(3)Wire.beginTransmission(address):開始一次數據傳輸,發送一個I2C開始字符,參數address表示器件的7位地址。

(4)Wire.endTransmission()和Wire.endTransmission(stop):結束一個由beginTransmission()開始的并且由write()排列的從機的傳輸。在Arduino中,endTransmission()接受一個布爾型變量,如果為1,則endTransmission()發送一個停止信息;如果為0,則發送開始信息。

(5)Wire.write():向從機發送數據,有3種形式。

Wire.write(value):value為要發送的數值。

Wire.write(string):string為字符組的指針。

Wire.write(data,length):data為一個字節數組,length為傳輸的數量。

(6)Wire.send():發送數據。

(7)Wire.receive():接收數據。

(8)Wire.onReceive():從機接收主機發來的數據。

(9)Wire.onRequest():從機請求主機發送數據。

要打開Arduino IDE自帶的I2C的例程,在Arduino IDE的菜單欄中選擇“文件”>“示例”>“Wire”命令,如圖4-10所示。

圖4-10 Arduino IDE自帶的I2C例程

主站蜘蛛池模板: 邳州市| 肃南| 苏州市| 舟山市| 青铜峡市| 武宣县| 莒南县| 清苑县| 响水县| 吉林省| 文昌市| 汉阴县| 上饶县| 桓仁| 西和县| 称多县| 友谊县| 台北市| 京山县| 枣强县| 鞍山市| 克拉玛依市| 富锦市| 侯马市| 惠水县| 闽侯县| 临猗县| 和田市| 永兴县| 青浦区| 崇礼县| 噶尔县| 宜昌市| 营口市| 新邵县| 抚顺县| 石棉县| 兴国县| 杭锦后旗| 桦甸市| 嵊泗县|