実現したいこと
M5sticks Plus2で振動を検知したいです。
ArduinoIDEを使用しています。
Githubに載っていたM5sticks Plus2のサンプルコードは正常に動作したため初期設定のミスはないと思います。
発生している問題・分からないこと
M5sticks Plusで振動を検知するコードをネットで見つけ、コンパイルしたのですがエラーが出ます。
変更した点は、一行目、#include "M5StickCPlus2.h" をPlus2変更しました。
エラーメッセージ
error
115rdbgn.vikig\sketch_may27b\sketch_may27b.ino: In function 'void setup()': 2 3error: 'class m5::M5Unified' has no member named 'IMU' 4 M5.IMU.Init(); 5 ^~~ 6 error: 'class m5::M5Unified' has no member named 'IMU' 7 M5.IMU.SetAccelFsr(M5.IMU.AFS_4G); 8 ^~~ 9error: 'class m5::M5Unified' has no member named 'IMU' 10 M5.IMU.SetAccelFsr(M5.IMU.AFS_4G); 11 ^~~ 1215rdbgn.vikig\sketch_may27b\sketch_may27b.ino: In function 'void loop()': 13 14 error: 'class m5::M5Unified' has no member named 'IMU' 15 M5.IMU.getAccelData(&ax,&ay,&az[i]); // IMUから加速度を取得 16 ^~~ 17 18exit status 1 19 20Compilation error: 'class m5::M5Unified' has no member named 'IMU'
該当のソースコード
#include <M5StickCPlus2.h> #define SAMPLE_PERIOD 20 // サンプリング間隔(ms) #define SAMPLE_SIZE 240 // サンプリング間隔(20) x 画面幅(240) = 4.8s #define BUTTON_A 37 bool isPause = false; void setup() { M5.begin(); M5.Lcd.setRotation(3); M5.IMU.Init(); M5.IMU.SetAccelFsr(M5.IMU.AFS_4G); pinMode(BUTTON_A, INPUT_PULLUP); attachInterrupt(digitalPinToInterrupt(BUTTON_A), handleInterrupt, FALLING); } float ax, ay, az[SAMPLE_SIZE]; #define X0 5 // 横軸の描画開始座標 // 水平静止で重力加速度1000mGが常にかかることを考慮する #define MINZ -1000 // 縦軸の最小値 mG #define MAXZ 3000 // 縦軸の最大値 mG void handleInterrupt() { isPause = !isPause; } void loop() { if (!isPause) { M5.Lcd.fillScreen(BLACK); // 画面クリア for (int i = 0; i < SAMPLE_SIZE; i++) { if (isPause) break; M5.IMU.getAccelData(&ax,&ay,&az[i]); // IMUから加速度を取得 az[i] *= 1000; // mGに変換 if (i == 0) continue; // Serial.println(az[i]); // シリアルモニタは115200baudで通信 int y0 = map((int)(az[i - 1]), MINZ, MAXZ, M5.Lcd.height(), 0); int y1 = map((int)(az[i]), MINZ, MAXZ, M5.Lcd.height(), 0); M5.Lcd.drawLine(i - 1 + X0, y0, i + X0, y1, YELLOW); delay(SAMPLE_PERIOD); } } }
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
Plus2のサンプルコードと見比べて工夫してみたりしましたが解決できませんでした。
どこを変更すればM5sticks PlusのコードをM5sticks Plus2でも使用できるようになりますか?
補足
特になし
型名などに記述していない様子なので大丈夫とは思いますが、M5Sticks Plus2ではなくM5StickC Plus2だと思います。
> Githubに載っていたM5sticks Plus2のサンプルコード
URLを示してください。それはIMUを使っているものですか?
ボードライブラリは何をインストールしていますか? いや、なぜM5Unifiedが顔をだすのかなぁ...と。あと、私の環境ではESP32とM5Stackのボードライブラリを入れただけではM5StickCPlus2.hは見付からないみたいなので何を入れているのかも気になるところです。
とりあえず、M5Unifiedのソース( https://github.com/m5stack/M5Unified/blob/master/src/M5Unified.hpp )を覗くとIMUのデフォルトのインスタンスは IMU ではなく Imu だったりしそうな気がしますがどうでしょう。
https://github.com/m5stack/M5StickCPlus2
こちらのライブラリを使われているだと思われますが、下記のサンプルを見るに API が違うのではないでしょうか。IMU については StickCP2.Imu のようです。
https://github.com/m5stack/M5StickCPlus2/blob/master/examples/Basic/imu/imu.ino