IMUとservo機能を連携させようとしますが、ソースファイルを一個にするのは汚い管理なので、機能ごとに分割します。
この時にArduino IDEだとバックエンドで無意識に処理をしてくれますが、VScodeを使う時にはほぼcの作法に従う必要があります。つまり、
・他のソースを使う時には、xxx.hとしてインクルードする。
今回のケースではservo.cppからimu.hを呼び出しています。
しかし、imu.hの組み込みで”M5にIMUは見つからないよ”とコンパイルエラーになります。
で調べると、
と、
https://github.com/m5stack/M5Stack/blob/master/src/M5Stack.h
にあるようにimu.hの先頭部分は、
#define M5STACK_MPU6886
#include <M5Stack.h>
ですが、ここで#defineの”M5STACK_MPU6886″がM5stack.h中で展開されてIMUオブジェクトが生成されるので、#include <M5Stack.h>文が後に来ないと機能しません。
従ってservo.cppからは、#include <M5Stack.h>を削除してimu.hの記述を使うようにするとうまくいきました。二重インクルードはこの場合にはエラーにならず、最初の#include <m5stack.h>が有効になるからでしょう。
== top of the servo.cpp ==
//#include <m5stack.h> // M5stack needs this module
#include <imu.h>
== top of the imu.h ==
#define M5STACK_MPU6886
#include <m5stack.h>
ということなので、Arduino IDEと違ってVScodeは普通のc開発に近いよということでした。
admin