M5Stackの種類を判別したいのだが

M5Stack GreyとM5StickCの判別をしたいと思い、いろいろ試行錯誤。

ライブラリを作成中。両方で動くようにしたい。
機種に合わせて処理を変えたい(画面サイズが異なる)。

といった感じ。
最初は、「_M5STACK_H_」と「_M5STICKC_H」が定義されているかどうかを調べればいかと思ったのだけど、その前に

#include  とか
#include

をライブラリのファイルに入れなくちゃいけないわけで。その時点で破綻している。

別の方法。

boards.txt から名前を判別するというのも見つけた。

Arduinoでボードを判別する – Qiita

しかし、これもうまくいかない。そのファイルは、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

どうしますかね。

その後、こんなのを見つけた。これでいけた。

コメント