ハイハイスクールアドベンチャー_m5stack_m5cardputer版
差分
このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン | ||
ハイハイスクールアドベンチャー_m5stack_m5cardputer版 [2024/02/06 18:26] – [ビルド] araki | ハイハイスクールアドベンチャー_m5stack_m5cardputer版 [2024/02/07 09:27] (現在) – [M5Cardputerについて] araki | ||
---|---|---|---|
行 39: | 行 39: | ||
また、データをmicroSDカードにストアして利用するためmicroSDカードも必須である。 | また、データをmicroSDカードにストアして利用するためmicroSDカードも必須である。 | ||
+ | {{: | ||
===== ビルド ===== | ===== ビルド ===== | ||
本アプリケーションは[[https:// | 本アプリケーションは[[https:// | ||
行 53: | 行 54: | ||
それぞれ、platformio.ini に明記されているので、プロジェクトとして開いたら良しなにやってもらえるはずだ。 | それぞれ、platformio.ini に明記されているので、プロジェクトとして開いたら良しなにやってもらえるはずだ。 | ||
- | ターゲットは、M5Stack-grey, | + | ターゲットは、M5Stack-grey, |
M5Stack Core2であっても M5Stack-grey でビルドしたバイナリを使用可能である。 | M5Stack Core2であっても M5Stack-grey でビルドしたバイナリを使用可能である。 | ||
M5 Cardputer用は M5Cardputerをターゲットとしてビルドしたものを使用する。 | M5 Cardputer用は M5Cardputerをターゲットとしてビルドしたものを使用する。 | ||
+ | {{:: | ||
+ | |||
+ | ===== あれこれ ===== | ||
+ | |||
+ | ==== M5Cardputerについて ==== | ||
+ | |||
+ | M5Cardputerについては240x135ピクセルの1.14インチ液晶を持つが、これはハイハイスクールアドベンチャーの画像データが想定してる256x152ピクセルよりも小さい。 | ||
+ | |||
+ | なので、当初は移植対象から除外していたのだが、GFXライブラリーは、バッファの画像をアフィン変換してLCDに転送する機能を持っていると知ったため、後から対象にした。 | ||
+ | |||
+ | 256x152の画面を縮小しているが、画像についてはおおむね問題ないレベルで表示できていると思う。 | ||
+ | |||
+ | 問題は、メッセージエリアである。 | ||
+ | 勿論ここも8x16/ | ||
+ | 頑張れば読めるというレベルで、これを初見でプレイするのは厳しいだろう。 | ||
+ | |||
+ | キーボードもSIOで通信しているFACESのキーボードと違い、キーマトリックスがGPIOにもろに露出した形になっているため、GPIOから得たキーマップをキーコードに変換してやらないと使い物にならない。 | ||
+ | 幸い、このあたりも M5Cardputerのライブラリがまとめて面倒を見てくれているので、アプリを書くにあたっては困らないが、コードに差異が生じるので理解しておかないといけない。 | ||
+ | |||
+ | ==== ピンアサインなど ==== | ||
+ | |||
+ | M5シリーズは、ぽいぽいピンアサインが変わるので、このあたりも留意していなければならない。 | ||
+ | SDカードやキーボードの割り当てはちゃんと機種を見て動作を変えないといけない部分だ。 | ||
+ | |||
+ | 例えば、SDカードのマウントは以下のようにしている。 | ||
+ | Core/ | ||
+ | |||
+ | < | ||
+ | cfg.clear_display = true; | ||
+ | M5.begin(cfg); | ||
+ | uint8_t ssPin = M5.getPin(m5:: | ||
+ | if (M5.getBoard() == m5:: | ||
+ | { | ||
+ | M5Cardputer.begin(cfg); | ||
+ | spi.begin( | ||
+ | M5.getPin(m5:: | ||
+ | M5.getPin(m5:: | ||
+ | M5.getPin(m5:: | ||
+ | M5.getPin(m5:: | ||
+ | ); | ||
+ | } | ||
+ | else | ||
+ | { | ||
+ | spi = SPI; | ||
+ | } | ||
+ | M5.Display.setRotation(1); | ||
+ | Serial.printf(" | ||
+ | // mount SD (need for M5Unified library) | ||
+ | while (false == SD.begin(ssPin / | ||
+ | { | ||
+ | M5.Display.println(" | ||
+ | delay(500); | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | キーボードも Cardputerはさておき、CoreとCore2とではピンアサインが違うため、コードを変えないといけない。 | ||
+ | こっちは、KeyBoardという仮想クラスを作っておいてボードによってインスタンスを変えることで対応している。 | ||
+ | |||
+ | CoreはWireでINTR=5だが、Core2はWire1でINTR=33だ。 | ||
+ | |||
+ | < | ||
+ | class M5StackKeyBoard : public KeyBoard | ||
+ | { | ||
+ | protected: | ||
+ | public: | ||
+ | M5StackKeyBoard() : KeyBoard(m5:: | ||
+ | { | ||
+ | Wire.begin(); | ||
+ | pinMode(INTR, | ||
+ | digitalWrite(INTR, | ||
+ | } | ||
+ | virtual ~M5StackKeyBoard() { Wire.end(); } | ||
+ | virtual bool wait_any_key() override; | ||
+ | virtual bool fetch_key(uint8_t &c) override; | ||
+ | |||
+ | static const int INTR = 5; | ||
+ | }; | ||
+ | |||
+ | class M5Core2KeyBoard : public KeyBoard | ||
+ | { | ||
+ | protected: | ||
+ | public: | ||
+ | M5Core2KeyBoard() : KeyBoard(m5:: | ||
+ | { | ||
+ | Wire1.begin(); | ||
+ | pinMode(INTR, | ||
+ | digitalWrite(INTR, | ||
+ | } | ||
+ | virtual ~M5Core2KeyBoard() { Wire1.end(); | ||
+ | virtual bool wait_any_key() override; | ||
+ | virtual bool fetch_key(uint8_t &c) override; | ||
+ | |||
+ | static const int INTR = 33; | ||
+ | }; | ||
+ | </ |
ハイハイスクールアドベンチャー_m5stack_m5cardputer版.1707211567.txt.gz · 最終更新: 2024/02/06 18:26 by araki