«

»

Nov 06

NS.One dan I2C Slave

Untuk membuat I2C Slave, kita harus men-definisikan alamat slave serta melengkapinya dengan fungsi untuk mengirim dan menerima data. Dalam contoh berikut, sinyal acknowledge berupa pengiriman balik digit yang diterima slave.

#include <Wire.h>

#define SLAVE_ADDRESS 0x04
int number = 0;
int state = 0;

void setup() {
  pinMode(21, OUTPUT);
  Serial.begin(9600); 
  Wire.begin(SLAVE_ADDRESS);
  Wire.onReceive(receiveData);
  Wire.onRequest(sendData);
  Serial.println("Ready!");
}

void loop() {
  delay(100);
}

// callback for received data
void receiveData(int byteCount) {
  while(Wire.available()) {
    number = Wire.read();
    Serial.print("data received: ");
    Serial.println(number);
    if (number == 1) {
      if (state == 0) {
        digitalWrite(21, HIGH); 
	state = 1;
      }
      else {
        digitalWrite(21, LOW); 
	state = 0;
      }
    }
  }
}

// callback for sending data
void sendData() {
  Wire.write(number);
}