#include <Wire.h>
//----- INITIALISE I2C -----
Wire.begin();
//----- WRITE TO I2C DEVICE -----
unsigned char value = 1;
Wire.beginTransmission(0x5a);
Wire.write(value);
uint8_t Result = Wire.endTransmission(true); //true=send stop
//Result: 0=success, 1=tx buff overrun, 2=NACK on address tx, 3=NACK on data tx, 4=other error
//----- READ FROM I2C DEVICE -----
Wire.requestFrom(0x5a, 2); //Address, no of bytes
uint8_t BytesReceived = Wire.available(); //The slave can send less than was requested
//No need to send stop as done automatically
if (BytesReceived >= 2)
{
byte LSB = Wire.read();
byte MSB = Wire.read();
}
//----- WRITE THEN READ I2C DEVICE -----
unsigned char value;
Wire.beginTransmission(0x5a);
Wire.write(value);
if (Wire.endTransmission(false) == 0) //false=send restart (IMPORTANT-THIS ENDTRANSMISSION DOES NOT SEND STOP!). 0=success, 1=tx buff overrun, 2=NACK on address tx, 3=NACK on data tx, 4=other error
{
Wire.requestFrom(0x5a, 2); //Address, no of bytes
uint8_t BytesReceived = Wire.available(); //The slave can send less than was requested
//No need to send stop as done automatically
if (BytesReceived >= 2)
{
byte LSB = Wire.read();
byte MSB = Wire.read();
}
}
else
{
Wire.endTransmission(true); //true=send stop
}
