
Wire library yang disertakan dalam software NS.One dan Arduino, memungkinkan kita untuk berkomunikasi dengan divais I2C / TWI. Pada board NS.One, SDA (jalur data) dan SCL (jalur clock) terletak pada pin 17 (PC1) dan 16 (PC0).
Terdapat dua versi pengalaman I2C, 7-bit dan 8-bit. 7 bit pertama meng-identifikasi divais, dan bit ke delapan menentukan proses tulis atau baca. Pustaka Wire menggunakan pengalamatan 7-bit. Bila pada datasheet atau contoh, menggunakan alamat 8-bit, alamat terakhir dibuang dgn menggeser satu bit ke kanan, menyisakan sebuah alamat antara 0 dan 127.
Sebagai contoh, chip DS1307 memiliki alamat 8-bit 0xD0. Setelah digeser satu bit ke kanan, alamat menjadi 0x68, dan alamat ini yang digunakan dalam program berbasis pustaka Wire.
#include <Wire.h> #define rtc 0x68 // The pre-defined address for DS1307 int ss,mm,hh,dd,DD,MM,YY; int prev; void setup() { Serial.begin(9600); Wire.begin(); } void loop() { static char buff[20]; get_time(); if(ss!=prev) // lcd Print when the seconds change { sprintf(buff,"%02d-%02d-%02d",DD,MM,2000+YY); Serial.println(buff); sprintf(buff,"%02d:%02d:%02d",hh,mm,ss); Serial.println(buff); prev=ss; } } void get_time() { Wire.beginTransmission(rtc); // start communication over i2c with DS1307 Wire.write((byte)0); // Write the value of the register to point to Wire.endTransmission(); // End communication over i2c with DS1307 Wire.requestFrom(rtc,7); // This will request 7 bytes of data ss = bcdToDec(Wire.read()); //starting from the '0' the register mm = bcdToDec(Wire.read()); hh = bcdToDec(Wire.read()); dd = bcdToDec(Wire.read()); DD = bcdToDec(Wire.read()); MM = bcdToDec(Wire.read()); YY = bcdToDec(Wire.read()); Wire.endTransmission(); } void set_time() { Wire.beginTransmission(rtc); Wire.write((byte)0); Wire.write(decToBCD(50)); // seconds Wire.write(decToBCD(59)); // minutes Wire.write(decToBCD(11)); // hours Wire.write(decToBCD(3)); // day of the week, startin monday Wire.write(decToBCD(21)); // date Wire.write(decToBCD(12)); // month Wire.write(decToBCD(11)); // year Wire.endTransmission(); } int decToBCD(int dec) { return dec/10*16 + (dec%10); } int bcdToDec(int bcd) { return bcd/16*10 + (bcd%16); }