From 4f38f31d6c937c2b59ca4aafd2c47acfbac8528b Mon Sep 17 00:00:00 2001 From: alanbjohnston Date: Sat, 6 Apr 2019 10:24:02 -0400 Subject: [PATCH] Create i2c_master_register_read.ino --- arduino/i2c_master_register_read.ino | 53 ++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 arduino/i2c_master_register_read.ino diff --git a/arduino/i2c_master_register_read.ino b/arduino/i2c_master_register_read.ino new file mode 100644 index 00000000..e8c7f1a4 --- /dev/null +++ b/arduino/i2c_master_register_read.ino @@ -0,0 +1,53 @@ +// Wire Master Reader +// by Nicholas Zambetti + +// Demonstrates use of the Wire library +// Reads data from an I2C/TWI slave device +// Refer to the "Wire Slave Sender" example for use with this + +// Created 29 March 2006 + +// This example code is in the public domain. + +// modified by Alan Johnston to show reading registers 0 - 3 +// code based on https://forum.arduino.cc/index.php?topic=211587.0 + +#include +#define I2C_ADDRESS 0x4B +#define REGISTER_0 0x00 +#define REGISTER_1 0x01 +#define REGISTER_2 0x02 +#define REGISTER_3 0x03 + +uint8_t reg; // I2C read register + +void setup() { + Wire.begin(); // join i2c bus (address optional for master) + Serial.begin(9600); // start serial for output + pinMode(LED_BUILTIN, OUTPUT); + Serial.println("Starting"); +} + +void loop() { + for (reg=0; reg < 4; reg++) { + delay(5000); + digitalWrite(LED_BUILTIN, HIGH); + Wire.beginTransmission(I2C_ADDRESS); + Wire.write(reg); + Wire.endTransmission(); + delay(100); + digitalWrite(LED_BUILTIN, LOW); + + + Wire.requestFrom(I2C_ADDRESS, 2); // request 2 bytes from I2C device + byte LSB = Wire.read(); + byte MSB = Wire.read(); + + uint16_t register_value = ((MSB << 8) | LSB); + + Serial.print("Read "); + Serial.print(register_value); + Serial.print(" from register "); + Serial.println(reg); + } +}