Hello~~~
I would like to modify this program used for mma7455(I2C) as the 'Multiple Bytes Read' mode of I2C interface.
The program can run normally, but only read one byte one time.
Thank you guys. ![]()
#include <Wire.h>
#define ACCELEROMETER 0x1D //Address for Accelerometer
//REGISTERS
#define MODE_CONTROL 0x16 //Mode control register
#define PULSE_DET 0x1B //Pulse detection threshold limit value
#define X_OUT 0x06 //8 bit register containing value for X
#define Y_OUT 0x07 //8 bit register containing value for Y
#define Z_OUT 0x08 //8 bit register containing value for Z
#define DETECTION 0x0A //Detection source register
//VALUES
#define Z_PULSE 0x40 //Pulse detected on Z-axis
#define SENSEVALUE 0x25 //Default sensitivity level
//required setup function
void setup() {
Wire.begin();
Serial.begin(9600);
accWrite(MODE_CONTROL, SENSEVALUE);
}
//required loop function
void loop() {
Serial.print("X: ");
Serial.print(accRead(X_OUT));
Serial.print(" Y: ");
Serial.print(accRead(Y_OUT));
Serial.print(" Z: ");
Serial.println(accRead(Z_OUT));
delay(100);
}
//function to write byte data into a register
void accWrite(byte address, byte data) {
Wire.beginTransmission(ACCELEROMETER);
Wire.send(address);
Wire.send(data);
Wire.endTransmission();
}
//function to read byte data from a register
unsigned int accRead(byte address){
byte val = 0x00;
Wire.beginTransmission(ACCELEROMETER);
Wire.send(address);
Wire.endTransmission();
Wire.requestFrom(ACCELEROMETER, 1);
while (Wire.available() <= 0) { // wait for a value
Serial.print(address, HEX); // show which axis is being read
}
val = Wire.receive();
Wire.endTransmission();
Serial.print("got: ");
Serial.println(val);
return val;
}