ハイハイスクールアドベンチャー_raspberry_pico_lcd版
文書の過去の版を表示しています。
ハイハイスクールアドベンチャー Raspberry Pico + LCD版
概要
ハイハイスクールアドベンチャー PicoCalc版を作ったついでといったら何ですが、PicoCalc のコアである Raspberry Pi PicoにLCDとかSDカードスロットとかキーボードとか繋げたら、別に PicoCalcじゃなくても遊べるじゃん? と、いうことで、ソースコードにちょいちょい手を入れて、仕立て上げたのがこれです。
pico1_lcd28 または pico2_lcd28 を選んでビルドすれば uf2ファイルが出来上がりますので適宜インストールしてください。
現状、Pico-ResTouch-LCD-2.8に、OTGアダプタをかませたUSBキーボード1)をサポートしています。
あれこれ
例によって、すぐ動くはずが、なかなか動かなかったあれこれを。
Pico-ResTouch-LCD-2.8
STT7789 という、よくあるコントローラで 240×320の液晶(タッチパネル/TFカードスロット込み)です。 LovyanGFX であっさり動くだろうと思っていたら、全然表示が来なくて大変苦労しました。
原因はバックライトのコントロールにありました。 LovyanGFXが用意してくれているのはGPIOピンからPWM制御で明るさをいじれる、そういうインターフェイスだけなのですが、こいつは、ずばりONかOFFかしかない様子。
今でもこのやり方が正しいのかわかりませんが、ピンにデジタルでHIGH/LOWを出すだけのバックライトインターフェイスを作成してそれを使うようにしたら、あっさり表示が来ました。
まあ、描画はされていたけれど、バックライトが真っ暗で何も見えていなかっただけというのが実際だったわけです。
namespace lgfx { inline namespace v1 { //---------------------------------------------------------------------------- class Light : public ILight { public: struct config_t { uint32_t freq = 1200; int16_t pin_bl = -1; uint8_t pwm_channel = 0; bool invert = false; }; const config_t& config(void) const { return _cfg; } void config(const config_t &cfg) { _cfg = cfg; } bool init(uint8_t brightness) override; void setBrightness(uint8_t brightness) override; private: config_t _cfg; uint8_t _slice_num; }; } }
namespace lgfx { inline namespace v1 { //---------------------------------------------------------------------------- bool Light::init( uint8_t brightness ) { gpio_init( _cfg.pin_bl ); gpio_set_dir( _cfg.pin_bl, GPIO_OUT ); gpio_put( _cfg.pin_bl, 1 ); setBrightness(brightness); return true; } void Light::setBrightness( uint8_t brightness ) { if (_cfg.invert) brightness = ~brightness; // uint32_t duty = brightness + (brightness >> 7); if (brightness == 0) digitalWrite(_cfg.pin_bl, LOW); else digitalWrite(_cfg.pin_bl, HIGH); } //---------------------------------------------------------------------------- } }
USBキーボード
BLEキーボード
1)
US配列
ハイハイスクールアドベンチャー_raspberry_pico_lcd版.1744590051.txt.gz · 最終更新: 2025/04/14 00:20 by araki