#include "Wire.h"
#define MPU_ADDR 0x68
int16_t accX, accY, accZ;
float rangePerDigit = .000061f;
float NormAccX,NormAccY,NormAccZ;
float pitch, roll;
void setup() {
Serial.begin(9600);
Wire.begin();
Wire.beginTransmission(MPU_ADDR);
Wire.write(0x6B); // Power Management for MPU6050
Wire.write(0); // Wake up MPU
Wire.endTransmission(true);
}
void loop() {
Wire.beginTransmission(MPU_ADDR);
Wire.write(0x3B); // starting with register 0x3B (ACCEL_XOUT_H)
Wire.endTransmission(false);
Wire.requestFrom(MPU_ADDR,6,true); // request a total of 6 registers
accX=Wire.read()<<8|Wire.read(); // 0x3B (ACCEL_XOUT_H) & 0x3C (ACCEL_XOUT_L)
accY=Wire.read()<<8|Wire.read(); // 0x3D (ACCEL_YOUT_H) & 0x3E (ACCEL_YOUT_L)
accZ=Wire.read()<<8|Wire.read(); // 0x3F (ACCEL_ZOUT_H) & 0x40 (ACCEL_ZOUT_L)
// Normalize values
NormAccX = accX * rangePerDigit * 9.80665f;
NormAccY = accY * rangePerDigit * 9.80665f;
NormAccZ = accZ * rangePerDigit * 9.80665f;
// Calculate pitch and roll
pitch = -(atan2(NormAccX, sqrt(NormAccY*NormAccY + NormAccZ*NormAccZ))*180.0)/M_PI;
roll = (atan2(NormAccY, NormAccZ)*180.0)/M_PI;
// Output pitch and roll to Serial Monitor
Serial.print("Pitch : ");
Serial.print(pitch);
Serial.print(" dan Roll : ");
Serial.print(roll);
Serial.println();
delay(100);
}