
write( dataByte) // new data to put into that memory register

write( registerAddress) // command byte to target the register location

beginTransmission( deviceAddress) // Attention sensor deviceAddress! Writing a byte to a sensor’s control register can be done with four basic steps: 0b00001111) so you can see the on/off states when you read through your code. Most people use byte variables for the sensor’s bus and register memory addresses, but once you’ve figured out the pattern you need to set up in control register switch-bits, it helps to write that information as a long form binary number (eg. This can potentially change eight of those control switches simultaneously and, for parameters that are controlled by more than one bit, sometimes it’s actually required that you set them in one register-writing operation. These can add an extra layer of control settings to take care of when you initialize the sensor.Īrduino’s wire library can only transfer 8-bit bytes over the I☬ bus, so that’s the smallest amount of information you can write into a register memory location at one time. And sometimes there are “special chip functions” that perform some kind of post processing on those sensor readings that would be hard to replicate on the Arduino. I☬ chip-based sensors often have a dozen or more operational settings for things like bit-depth, sampling speed, noise reduction, etc., so you usually need to set bits in several different control registers before you can actually take a reading. Think of control registers as banks of On/Off switches, which you turn on by setting a bit to 1 and turn off by setting that bit to 0. Most sensors change how they operate based on the values stored in control registers. The functions named with the i2c_ prefix should be generic enough to work with most I☬ sensors, but I’ll also be referring to a few specific cases to show how you might need to modify those basic functions. There are many kinds of registers but for this introduction I am going to group them into three general types: Control, Data and Status registers, and provide brief examples of code that you can use to work with each of them. Even if you’ve never worked with registers before, jrowberg’s visual grid layout makes it easy to see how the sensor’s memory is divided into sections, which are doing different things.
