I2C通信を使用した角速度測定、LCD表示サンプル
Dependencies: mbed mbed_mpu6050_i2c_raw_register AQM0802
Diff: main.cpp
- Revision:
- 4:bf507fe18cb2
- Parent:
- 3:ebd656a9c89f
- Child:
- 5:8c482bdfb9e8
diff -r ebd656a9c89f -r bf507fe18cb2 main.cpp --- a/main.cpp Thu Dec 13 15:35:41 2018 +0000 +++ b/main.cpp Fri Jul 19 10:37:29 2019 +0000 @@ -1,45 +1,29 @@ #include "mbed.h" +#include "AQM0802.h" #include "mpu6050.h" Serial pc(USBTX, USBRX); -DigitalOut led1(LED1); -DigitalOut led2(LED2); -DigitalOut led3(LED3); -DigitalOut led4(LED4); -MPU6050 mpu(p9, p10); - -void turnOffAllLed() -{ - led1 = 0; - led2 = 0; - led3 = 0; - led4 = 0; -} - -void readData() -{ - double ax, ay, az; - mpu.readAccelemeter(ax, ay, az); - double gx, gy, gz; - mpu.readGyroscope(gx, gy, gz); - pc.printf("%.4lf %.4lf %.4lf %.4lf %.4lf %.4lf\r\n", ax, ay, az, gx, gy, gz); - turnOffAllLed(); - if(ax > ay && ax > az) { - led1 = 1; - } else if(ay > ax && ay > az) { - led2 = 1; - } else if(az > ax && az > ay) { - led3 = 1; - } else { - led4 = 1; - } -} +MPU6050 mpu(D4, D5); +AQM0802 lcd(I2C_SDA,I2C_SCL); int main() { - pc.baud(115200); - mpu.setMaxScale(MAX_ACC_8G, MAX_GYRO_1000degpersec); + double gx,gy,gz; //Z角速度情報を格納 + int i_gz; + char str[5]; + pc.baud(9600); + mpu.setMaxScale(MAX_ACC_8G, MAX_GYRO_1000degpersec);//[1000deg/sec]を測定上限とする。 + lcd.init(); + lcd.locate(1,0);//桁、行 + lcd.print("GYRO_Z");//1行目に「GYRO_Z」を表示 while(true) { - readData(); + mpu.readGyroscope(gx, gy, gz);//関数仕様上3軸すべて角速度取得する。 + i_gz=(int)gz;//doubleは大きすぎるのでint型へ変換 + pc.printf("gz:%d\r\n", i_gz);//Z軸方向のみ表示する。(他は使わない) + lcd.locate(1,1);//桁、行 + lcd.print(" ");//表示クリア + sprintf(str,"%4d",i_gz); + lcd.locate(1,1);//桁、行 + lcd.print(str);//表示クリア wait(0.2); } }