ユーザ用ツール

差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
次のリビジョン
前のリビジョン
ハイハイスクールアドベンチャー_raspberry_pico_lcd版 [2025/04/17 23:26] – [USBキーボード] arakiハイハイスクールアドベンチャー_raspberry_pico_lcd版 [2026/01/14 08:09] (現在) – [RP2350-Touch-LCD-2] araki
行 1: 行 1:
 ====== ハイハイスクールアドベンチャー Raspberry Pico + LCD版 ====== ====== ハイハイスクールアドベンチャー Raspberry Pico + LCD版 ======
 +===== あらすじ =====
 +
 +2019年((まさかこのゲームが2019年を超えて生き残っているとは思っていなかっただろう。))神奈山県立ハイ高等学校は 地盤が弱く校舎の老朽化も進んだため、 とうとう廃校にする以外方法がなく なってしまった。
 +
 +ところで大変な情報を手に入れた。 それは、
 +
 +「ハイ高校にATOMIC BOMBが仕掛けられている。」
 +
 +と、いうものだ。 どうやらハイ高が廃校になった時、 気が狂った理科の先生がATOMIC BOMBを 学校のどこかに仕掛けてしまったらしい。
 +
 +お願いだ。我が母校のコナゴナになった 姿を見たくはない。 早くATOMIC BOMBを取り除いてくれ……!!
 +
 +行動は英語で、“<動詞>” 或いは、“<動詞>”+“<目的語>“のように入れていただきたい。 例えば、”look room”と入れれば部屋の様子を見ることが出来るという訳だ。
 +
 +それでは Good Luck!!!…………
 ===== 概要 ===== ===== 概要 =====
  
行 10: 行 25:
  
 現状、[[https://www.waveshare.com/wiki/Pico-ResTouch-LCD-2.8|Pico-ResTouch-LCD-2.8]]に、OTGアダプタをかませたUSBキーボード((US配列))をサポートしています。 現状、[[https://www.waveshare.com/wiki/Pico-ResTouch-LCD-2.8|Pico-ResTouch-LCD-2.8]]に、OTGアダプタをかませたUSBキーボード((US配列))をサポートしています。
 +追記: [[https://www.waveshare.com/wiki/Pico-ResTouch-LCD-3.5|Pico-ResTouch-LCD-3.5]]もサポートしました。
 +また、BLEキーボードもPico 1W/Pico 2Wで利用できるようになっています。
  
 ===== あれこれ ===== ===== あれこれ =====
行 111: 行 128:
  
 SDカードのCSピンは SD.begin(22,SPI1)のように、SDインターフェイスの開始時に渡せばいいので、setCS()は呼ばないようにしてください。 SDカードのCSピンは SD.begin(22,SPI1)のように、SDインターフェイスの開始時に渡せばいいので、setCS()は呼ばないようにしてください。
 +
 +=== SPI上でSDとLCDが競合している場合 ===
 +
 +Pico Res-Touch LCD 2.8(3.5も同様)はSDカードインターフェイスとLCDインターフェイスをSPI1上に置いているため、両社は競合しています。
 +
 +このため。
 +CSピンでバスの譲り合い((奪い合い?))をしながら動作することになります。
 +
 +そもそも LovyanGFX も SDカードインターフェイスも競合を想定しているので、CSピンを正しくアサインしてやればうまく動くのですが、リセット後に不安定化する場合がままあります。
 +
 +集合知に問うと、最初に両方のCSピンをOFFにしてやればいいという情報が出てきました。
 +
 +<code cpp>
 +  pinMode(9, OUTPUT);  // LCD CS
 +  pinMode(22, OUTPUT); // SD CS
 +  digitalWrite(9, HIGH); // OFF
 +  digitalWrite(22, HIGH); // OFF
 +</code>
 +
 +このコードを入れた後はとりあえずリセット後におかしな読込みとなることはなくなったように思います。
 +
 +==== Pico Res-Touch LCD 3.5 ====
 +
 +Pico Res-Touch LCD 2.8と同じピンアサインを持つSPI液晶 + SDカードモジュールなのですが、画面が3.5インチ 320x480と大型化した関係で、コントローラが ILI9488 に変更されています。
 +
 +これはPicoCalcのものと同じなので、ピンと解像度((PicoCalcは 320x320))だけ変更してやれば動くだろうと思ったら、まったく表示が来なくて、3時間ほど試行錯誤をすることに。
 +
 +結論から言うと、16bit カラーモードで初期化してやらないといけないのでした。
 +
 +<code cpp>
 +  auto cfg = _panel_instance.config();
 +  ...
 +  cfg.dlen_16bit = true;
 +</code>
 +
 +要はカラーモードがあってなかったので書き込んでも表示が来なかったというわけです。
 +((おそらくデフォルトでは24か32ビットカラーになっているんだと思います。))
 +
 +なお、書き込み40000000 読み出し 2000000で駆動させています。
 +これより速くすると動きが怪しい感じになったので多分やめた方がいいでしょう。
 +正直表示は速くはありません。
 +
 +画面サイズが320x480なので、ハイハイスクールアドベンチャーでは縦長で使うことにしました。
 +
 +==== RP2350-Touch-LCD-2 ====
 +
 +2インチ (320x240)のタッチパネルとRP2350のボードが一体になったデバイス。
 +ST7789T3をコントローラに持つデバイスなので、ピン配置だけ合わせてやればLCD2.8とおおむね同じ感じで動く。
 +
 +但し、TFカードがSPI、液晶がSPI1と SPIの割り振りが違っているので、初期化部分で別コードとなっている。
 +
 +ワイヤレス機能はないので、キーボードはUSB一択。
 +プロセッサもRP2350なので、Pico2相当一択である。
 +
 +インターフェイスはUSB Type Cなので、Raspberry Pi Pico/2より扱いやすい。
  
 ==== USBキーボード ==== ==== USBキーボード ====
行 153: 行 225:
 ちょっとWeb界隈を漁ると、同じ現象で困っている人もいらっしゃる。 ちょっとWeb界隈を漁ると、同じ現象で困っている人もいらっしゃる。
  
-で、さらに調べていったら、**ヘッダファイルの中でコールバックのテンプレート宣言に<code cpp>__attribute__((weak))</code>つけてる**じゃありませんか!+で、さらに調べていったら、**ヘッダファイルの中でコールバックのテンプレート宣言に**<code cpp>__attribute__((weak))</code>**つけてる**じゃありませんか!
 ダメ、絶対! ダメ、絶対!
 WEAK属性は実装の方にだけつけて宣言につけちゃダメ! WEAK属性は実装の方にだけつけて宣言につけちゃダメ!
行 243: 行 315:
 static uint8_t const keycode2ascii[128][2] = { HID_KEYCODE_TO_ASCII }; static uint8_t const keycode2ascii[128][2] = { HID_KEYCODE_TO_ASCII };
 </code> </code>
 +
 +なお、カーソルキーやスクロールキーは 0 を返すようになっているので、別途処理を追加してやる必要がある。
 +<code cpp>
 +switch (report->keycode[i]) 
 +{
 +    case 0x4f: ch = 0x1d; break; // Right Arrow
 +    case 0x50: ch = 0x1c; break; // Left Arrow
 +    case 0x51: ch = 0x1f; break; // Down Arrow
 +    case 0x52: ch = 0x1e; break; // Up Arrow
 +}
 +</code>
 +
 +
  
 ==== BLEキーボード ==== ==== BLEキーボード ====
行 250: 行 335:
 線がのたくりまわるのは好きではないので、最初にこっちを実装しようとしたのですが、サンプル見ても、Web界隈で調べても、例によってマイコンをBLEセントラルとして使っている事例は少ないんですよね。 線がのたくりまわるのは好きではないので、最初にこっちを実装しようとしたのですが、サンプル見ても、Web界隈で調べても、例によってマイコンをBLEセントラルとして使っている事例は少ないんですよね。
  
-実は未だ動いてないので、コードは同梱していませんが、とりあえず、色々実験はしているので、ここまでで得た知見を。+<del>実は未だ動いてないので、コードは同梱していませんが、とりあえず、色々実験はしているので、ここまでで得た知見を。</del> 
 +無事に動くに至りましたので、そこまでに得た知見をまとめておきます
  
 === ビルド === === ビルド ===
行 405: 行 491:
  
  
 +なお、このBLEキーボードのくだりについては再編集して[[bleキーボードをつなごう_btstack編]]にまとめました
  
  
  

This website uses cookies. By using the website, you agree with storing cookies on your computer. Also, you acknowledge that you have read and understand our Privacy Policy. If you do not agree, please leave the website.

More information