#include <Wire.h>
const byte accelerometerAddress = 0x68;

void setup() {
  Serial.begin(9600);
  Wire.begin();

  // configure
  Wire.beginTransmission(accelerometerAddress);
  Wire.write(0x1B); // select GYRO_CONFIG
  Wire.write(0x08); // write 00001000, no self test, +/- 4g
  Wire.endTransmission();

  Wire.beginTransmission(accelerometerAddress);
  Wire.write(0x6B); // select PWR_MGMT_1
  Wire.write(0x00); // write 000000000, turn off sleep mode use 8MHz oscilator
  Wire.endTransmission();
}

void loop() {
  Wire.beginTransmission(accelerometerAddress);
  Wire.write(0x3B); // start at ACCEL_XOUT_H
  Wire.endTransmission(false);

  // request registers ACCEL_XOUT_H through ACCEL_ZOUT_L
  Wire.requestFrom(accelerometerAddress, 6, true); // request 6 bytes

  // read data into memory and scale to g's
  int16_t accelerometerXT, accelerometerYT, accelerometerZT;
  float accelerometerX, accelerometerY, accelerometerZ;
  if (Wire.available() == 6) {
    accelerometerXT = (Wire.read() << 8 | Wire.read());
    accelerometerX = accelerometerXT / 16384.0;
    accelerometerYT = (Wire.read() << 8 | Wire.read());
    accelerometerY = accelerometerYT / 16384.0;
    accelerometerZT = (Wire.read() << 8 | Wire.read());
    accelerometerZ = accelerometerZT / 16384.0;
  }
  Wire.endTransmission(true);

  // print data
  Serial.print(accelerometerX);
  Serial.print(" ");
  Serial.print(accelerometerY);
  Serial.print(" ");
  Serial.print(accelerometerZ);
  Serial.println();
}