M5Stack GreyとM5StickCの判別をしたいと思い、いろいろ試行錯誤。
ライブラリを作成中。両方で動くようにしたい。
機種に合わせて処理を変えたい(画面サイズが異なる)。
といった感じ。
最初は、「_M5STACK_H_」と「_M5STICKC_H」が定義されているかどうかを調べればいかと思ったのだけど、その前に
#include とか
#include
をライブラリのファイルに入れなくちゃいけないわけで。その時点で破綻している。
別の方法。
boards.txt から名前を判別するというのも見つけた。
しかし、これもうまくいかない。そのファイルは、portableを使ってるとここにあった。
C:\arduino\arduino-1.8.9portable\portable\packages\esp32\hardware\esp32\1.0.1
「M5Stack_Core_ESP32」とか「M5STACK_FIRE」とか「ESP32_PICO」とか。
これを #ifdef で判別すればいいのかと思いきや、どれもだめ。スルーされる。環境のせいか?
というわけで、あきらめモード。
引数なしではM5Stackで正常に表示されるように。
M5StickCでは、必ず引数を指定してね。みたいな感じに落ち着きそうだ。
この時点ではこんな感じだ。
#ifndef DRAWPIANO_H #define DRAWPIANO_H //#include "Arduino.h" // Which board do you use? #include <M5Stack.h> //#include <M5StickC.h> class DrawPiano { public: #ifdef _M5STACK_H_ DrawPiano(int x = 0, int y = 50, int w =40, int h= 60); //for M5Stack _M5STACK_H_ M5Stack_Core_ESP32 M5STACK_FIRE #endif #ifdef _M5STICKC_H_ DrawPiano(int x = 2, int y = 20, int w = 20, int h = 24); // for M5StickC _M5STICKC_H_ ESP32_PICO #endif void init(); void drawKey(int num, bool boo, int keyOnColor = 64800); //64800 = ORANGE private: int keyX[13] = {0,1,2,3,4,6,7,8,9,10,11,12,14}; int keyY[13] = {0,1,0,1,0,0,1,0,1,0,1,0,0}; int posX, posY, keyWidth, keyHeight; }; #endif
どうしますかね。
その後、こんなのを見つけた。これでいけた。
同一ソースでM5StackとM5StickCの両対応したい場合…こうする。
boards.txtの中で定義されているbuild.board値に、プリフィクス ARDUINO_ が付いた定義が自動的に行われるので、
ARDUINO_M5Stick_C
ARDUINO_M5Stack_Core_ESP32
ARDUINO_M5STACK_FIRE
このへんがif defined分岐に利用できる。 pic.twitter.com/Xh39mu1hrS— らびやん (@lovyan03) July 8, 2019
コメント