Library receiving values from MPU6050
- include "mbed.h"
- include "TI_MPU6050.h"
Example
include the mbed library with this snippet
TI_MPU6050 mpu6050; DigitalOut led1(LED1); int main() { mpu6050.setSleepEnabled(false); while(1) { if (mpu6050.isHorizontal()) { led1 = 1; } else { led1 = 0; } int verticalAngle = mpu6050.getVerticalAngle(); printf("verticalAngle is %d\n\r", verticalAngle); } }
Diff: IS_MPU6050.cpp
- Revision:
- 1:bc1e8a435c95
- Parent:
- 0:81e5563b1ea1
--- a/IS_MPU6050.cpp Mon Jun 04 17:22:09 2018 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,73 +0,0 @@ -#include "IS_MPU6050.h" -#include "mbed.h" - -IS_MPU6050::IS_MPU6050() -{ - _mpu.initialize(); - - bool result = _mpu.testConnection(); - - if (result) { - // printf("MPU6050 Test Connection passed\n\r"); - } else { - // printf("MPU6050 Test Connection failed\n\r"); - } -} - -int IS_MPU6050::getVerticalAngle() -{ - int16_t ax, ay, az; - int16_t gx, gy, gz; - - int i = 0; - long x = 0; - long y = 0; - long z = 0; - - int repeatCount = 100; - - // 各データを100回読み込んで平均化 - for (i = 0; i < repeatCount; ++i) { - _mpu.getMotion6(&ax, &ay, &az, &gx, &gy, &gz); - - // printf("x:%d; y:%d; z:%d;\n\r",ax,ay,az); - - x = x + ax; // X軸を読み込む - y = y + ay; // Y軸を読み込む - z = z + az; // Y軸を読み込む - } - - double avX = x / repeatCount; - double avY = y / repeatCount; - - int verticalAngle = atan2(avX - 507, avY - 520) / 3.14159 * 180.0; - - return verticalAngle; -} - -bool IS_MPU6050::isHorizontal() -{ - int verticalAngle = getVerticalAngle(); - - int baseAngle = 90; - bool isHorizontal; - - if (verticalAngle < (baseAngle - 20)) { - // printf("vertical Angle : %d;\n\r", verticalAngle); - - isHorizontal = false; - } else if ((baseAngle + 20) < verticalAngle) { - // printf("vertical Angle : %d;\n\r", verticalAngle); - - isHorizontal = false; - } else { - isHorizontal = true; - } - - return isHorizontal; -} - -void IS_MPU6050::setSleepEnabled(bool enabled) -{ - _mpu.setSleepEnabled(enabled); -}