MachiKania

MachiKania type P/PU ver 1.7.0を公開

2026年6月19日

MachiKania type P/PU ver 1.7.0 を公開しました。

https://github.com/machikania/phyllosoma/releases/tag/Ver1.7.0

今回の更新の目玉は、以下の通りです。
Waveshare RP2350-Touch-LCD-2 (Wiki) に対応
・CST816D, TBUTTON, QMI8658 の3つのクラスを追加
・USBキーボードドライバにPCのターミナルソフトから直接文字コードで入力する機能を追加
・MachiKania USB ゲームパッドに対応
・文字列演算子(=, !=, <, <=, >, >=, AND, OR)を追加
・IF などで文字列を条件式に取ることができるようにした
・年齢制限のあるアプリケーションの開発に対応

20260601-RP2350-LCD-2.png

GitHub リリースページはこちら
Type P 公式ホームページはこちら
Type PU 公式ホームページはこちら


Waveshare RP2350-Touch-LCD-2に対応

Waveshare RP2350-Touch-LCD-2 (以下、RP2350-LCD-2) は、2インチのタッチパネル付きの液晶を搭載した RP2350 ボードです。マイクロ SD ソケット・バッテリー充電機能・加速度センサーも搭載しており外部インタフェース用のGPIOピンも使えるという、おもしろい基板なので、MachiKania type P でも対応できるようにしました。

USB ポートにキーボードを接続することができ、半田付けしなくても MachiKania が使えるボードの一つです。ボタンが無いので、GPIO ピンにタクトスイッチを接続して使うか、USB キーボードもしくは以下に述べる USB ゲームパッドを接続して使用してください。

また、タッチパネルと加速度センサーが標準装備されているので、それらを入力デバイスとして使用する BASIC プログラムを作成し、MACHIKAP.BAS に書き込んで使うなどの使用方法も可能です。タッチパネルと加速度センサーを簡単に使う方法についても、この記事の下の方で述べます。

どのポートが何に繋がれているかの一覧は、以下の通りです。
GP0 I/O bit0 / PWM3
GP1 I/O bit1 / PWM2
GP2 I/O bit2 / PWM1
GP3 I/O bit3
GP4 I/O bit4 / UART TX
GP5 I/O bit5 / UART RX
GP6 I/O bit6
GP7 I/O bit7
GP8 I/O bit8 / SPI RX / button1 (UP)
GP9 I/O bit9 / SPI CS / button2 (LEFT)
GP10 I/O bit10 / SCK / button3 (RIGHT)
GP11 I/O bit11 / SPI TX / button4 (DOWN)
GP12 IMU_SDA / TP_SDA / I2C SDA
GP13 IMU_SCL / TP_SCL / I2C SCL
GP14 I/O bit14 / IMU_INT1
GP15 LCD_BL
GP16 LCD_DC
GP17 LCD_CS
GP18 LCD_CLK
GP19 LCD_DIN(MOSI)
GP20 LCD_RST
GP21 SOUND OUT
GP22 I/O bit12 / button5 (START)
GP23 I/O bit13 / button6 (FIRE)
GP24 SD_DO(MISO)
GP25 SD_CS
GP26 SD-SCLK
GP27 SD_DI(MOSI)
GP28 BAT_ADC / ADC2
GP29 I/O bit15 / TP_INT
20260601-rp2350-lcd-2pin.png


RP2350-LCD-2 のバックライト調整

readme.txt にも書きましたが、RP2350-LCD-2 のバックライト明度は、GP15 を通じて行います。MachiKania では、PWM をこのポートに割り当てるのが、明度を調整する唯一の方法です。例えば、MACHIKAP.INI で、
PWM4=15
と記述しておくと、PWM4 をこれに割り当てることができます。次の BASIC コード例の様に制御できます。

do
  for i=0 to 1000
    PWM i, 1000, 4
    wait 1
    cursor 0,10 : print i,
  next
loop


CST816D, TBUTTON, QMI8658 の3つのクラスを追加

RP2350-LCD-2には、タッチパネル (CST816D) と加速度センサー (QMI8658A) が搭載されています。これらを簡便に使うため、CST816D, TBUTTON, QMI8658 の3つのクラスを用意しました。

下は、CST816D と TBUTTON クラスを用いて、RP2350-LCD-2 でタッチボタンを実装するサンプルプログラムです。ほぼ同じものが、SAMPLES ディレクトリーに BTNTEST.BAS として含まれています。
useclass CST816D,TBUTTON,GEN3O
usegraphic
K=new(GEN3O,88,"UTF-8")
T=new(CST816D)

for y=0 to 1
  for x=0 to 4
    point x*60,40+y*100
    K.GPRT(chr$(0x30+x+y*5),0,7)
    new(TBUTTON,x*60,40+y*100,48,88,funcaddress(push_cb),funcaddress(release_cb),x+y*5)
  next
next

do
  wait 1
  if T.POLLING() then
    TBUTTON::touch(T.Xpos, T.Ypos)
  else
    TBUTTON::release()
  endif
loop

label push_cb
  print args(1);
  point args(4),args(5)
  K.GPRT(chr$(0x30+args(1)),0,3)
return

label release_cb
  point args(4),args(5)
  K.GPRT(chr$(0x30+args(1)),0,7)
return

実行時のスクリーンショット
20260601-TBUTTON.png
動画はこちら(x.com)

下のスクリーンショットは、QMI8658 クラスに含まれている SAMPLES.BAS で、加速度センサーの値を読みこんでいる様子です。 20260618-QMI8658.png
動画はこちら(x.com)


RP2350-LCD-2 のバッテリー残量推定

RP2350-LCD-2 は、リチウムバッテリーによる駆動ができ、USB ポートから給電する事により、充電も可能です。バッテリー残量は、MachiKania では、「ANALOG(28)」の値を読むことで知ることができます。

RP2350-LCD-2 をバッテリーで作動させると、バッテリー電圧は下のグラフの様に変化しました(1150 mAh のバッテリーを用いて測定)。4100 mV でフル充電、3300 mV で残量ゼロとして、良さそうです。
20260601-battery.png

ANALOG(28) の入力は、バッテリー電圧の 1/3 の電圧を測定しており、12 ビット ADC (0 - 4095) なので、4100 mV は 1696 に、3300 mV は 1365 に相当します。色々とテストした結果、MachiKania の BASIC プログラムでは、以下のサブルーチンを GOSUB 関数で呼び出せば、バッテリーの残り容量%を、±7%の誤差で得ることができます。
rem 4100 mV = 1696 = 100%
rem 3550 mV = 1468 = 40%
rem 3300 mV = 1365 = 0%
label BATTERYP
  var a
  a=analog(28)
  if a>1468 then
    return 60*(a-1468)/(1696-1468)+40
  else
    return 40*(a-1365)/(1468-1365)


USBキーボードドライバにPCのターミナルソフトから直接文字コードで入力する機能を追加

MachiKania を PC に接続し PC 上のターミナルソフトからテキストファイルを転送できるようになりました。この機能の詳細については、別の記事を参照してください。


MachiKania USB ゲームパッドに対応

Pico-ResTouch-LCD-3.5, RP2350-Touch-LCD-2, RP2350-LCD-1.47 などの基板は、デフォルトではボタンが接続されていません。また、スピーカーやブザーが接続されていないため、音も鳴りません。そこで、それに対応するため、USB 接続のゲームパッドを使えるようにしました。

USB ゲームパッドの詳細は、別記事を参照してください。回路図、ソースコード及びバイナリーは、以下の GitHub レポジトリーにあります。
https://github.com/kmorimatsu/machikania_gamepad


文字列演算子を追加

KM-BASIC の文法をアップデートし、文字列演算子 (=, !=, <, <=, >, >=, AND, OR) を追加しました。また、IF 文などの条件式で、文字列を使えるようにしました。例えば、下の例の様に使う事ができます。
IF "ABC"=T$ AND "DEF"=S$ THEN
  print "T$ is 'ABC'"
  print "S$ is 'DEF'"
ELSEIF T$<"ABC" THEN
  print "T$ is probably shorter than 'ABC'"
ENDIF

なお、IF 文などでの条件式での判定では、文字列の先頭文字が「0」の場合に偽判定、それ以外の場合に真判定としています。「"ABC"=T$」などの比較演算子は、文字列「1」もしくは「0」を返します。

また、従来 STRNCMP() 関数が使えましたが、それ以外に STRCMP() を追加しました。STRNCMP() と異なり、比較する文字列長の指定が要りません。


年齢制限のあるアプリケーションの開発に対応

2027 年から、"California AB 1043" が施行されます。この条例は、OS とアプリケーションの両方に、年齢制限を行うためのインターフェースと実行時の対応を義務付けるものです。この条例に対応するため MachiKania では、アプリケーションで年齢確認を行うためのインターフェースを用意しました。ソフトウェアーによってはこの条例への対応として、「カリフォルニア州では使用禁止」というライセンスを適用しているものもあるようですが、開発者の一人である私自身がカリフォルニア州に在住のため、使用不可の様な対応はできず、ちゃんと対応する事にしました。

AB1043 では、OS 側で「アカウント設定時に生年月日もしくは年齢を示すことを要求するインターフェースを提供」しなければならないとあります。MachiKania では、「アカウント設定時に」に該当する操作として MACHIKAP.INI の編集とし、「インターフェースを提供」する機能として、新たに「SYSTEM(7)」を用意しました。

MACHIKAP.INI では、デフォルトとして「AGE=12」のように、年齢設定が12歳になっていますので、適宜変更して年齢設定を行ってください。また、アプリケーションの側では「SYSTEM(7)」を読み込むことでユーザーの年齢を知ることができるので、成人用アプリケーション(13歳以上、16歳以上、もしくは18歳以上を求めるもの)を作成する場合、「SYSTEM(7)」を読み込むことでプログラム実行の可否を判断するようにしてください。

コメント

コメントはありません

コメント送信