#include <M5StickCPlus.h> #include "BluetoothSerial.h" BluetoothSerial SerialBT; // -------------------------------------------------------- // 変数・定数定義部 // -------------------------------------------------------- float acc[3]; // 加速度測定値格納用(X、Y、Z) float accOffset[3]; // 加速度オフセット格納用(X、Y、Z) float gyro[3]; // 角速度測定値格納用(X、Y、Z) float gyroOffset[3]; // 角速度オフセット格納用(X、Y、Z) float roll = 0.0F; // ロール格納用 float pitch = 0.0F; // ピッチ格納用 float yaw = 0.0F; // ヨー格納用 const float pi = 3.14; char buf[60]; const String dev_name = "M5StickCPlus_IMU_Data"; // -------------------------------------------------------- // 関数定義部 // -------------------------------------------------------- // 加速度、角速度 測定値取得用 関数 void readGyro(){ M5.IMU.getAccelData(&acc[0], &acc[1], &acc[2]); // 加速度の取得 M5.IMU.getGyroData(&gyro[0], &gyro[1], &gyro[2]); // 角速度の取得 roll = atan(acc[0] / sqrt((acc[1] *acc[1]) + (acc[2] * acc[2]))) * 180 / pi; pitch = atan(acc[1] / sqrt((acc[0] *acc[0]) + (acc[2] * acc[2]))) * 180 / pi; yaw = atan(sqrt((acc[0] *acc[0]) + (acc[1] * acc[1])) / acc[2]) * 180 / pi; } void draw_display(){ M5.Lcd.setCursor(15, 80); M5.Lcd.printf(" %5.1f %5.1f %5.1f ", roll, pitch, yaw); } void setup() { // M5StickCの初期化と動作設定 Initialization and operation settings of M5StickC. M5.begin(); // 開始 Serial.begin(9600); SerialBT.begin(dev_name); M5.Beep.setBeep(4000,100); delay(500); // IMUの初期化 M5.Imu.Init(); // M5StickC Plusのディスプレイ上にデータ表示するために使用 M5.Lcd.setRotation(3); M5.Lcd.fillScreen(BLACK); M5.Lcd.setTextFont(2); M5.Lcd.setTextSize(1); M5.Lcd.setCursor(15, 10); M5.Lcd.println(dev_name); M5.Lcd.setTextFont(4); M5.Lcd.setTextSize(1); M5.Lcd.setCursor(15, 40); M5.Lcd.println(" Roll Pitch Yaw"); } void loop() { M5.update(); // 開始 readGyro(); draw_display(); if( roll > 10 || pitch > 10 || yaw >= 20 ) { M5.Beep.tone(3000, 1000); delay(500); M5.Beep.update(); M5.Beep.tone(1500, 1000); delay(500); M5.Beep.update(); } M5.Beep.update(); delay(1000); }