2023年12月14日木曜日

ToFセンサーの読み取りができなかった原因を検証してみた

 
先週まで書いていたToFセンサーのコードは、
センサーの読み取りができずに、途中までで作業が止まってしまいました。

・・・が、その後サンプルコードを公開していただいたので、
自分のコードと見比べて、動かなかった原因を検証してみました。

ToFセンサーでデータを取れていなかった原因

その1 データの文字列を参照する位置がずれている

iotgetで取得した文字列を参照するとき、
Distanceのデータではない場所を読みに行っていた。
(signal countのところのデータを参照していた)

その2 メインループの戻り先不良。

センサーのデータを1件表示した後、0x14をiotputしてiotgetするところへ戻ってループしていたが、それだとセンサーのデータ取得がうまくいかない。
0x00と0x01をiotputする所まで戻ってループしないと正常に動作しない。


以上の2点を修正したところ、自分のプログラムでも距離データを取得することができました。
 
サンプルコードでは、デバッグ用の16進数データを整形して、固定された場所にきれいに表示してある点とかはいいなと思いました。
 
自分のデバッグ用表示は桁がそろっていなかったりして、 わかりずらくてこういう点でバグが入り込んでも気がつけなかったのでしょう。
 
自分の書いたコードと、他の人のコードを比較していくのは、楽しいしとても勉強になりますね。
 
サンプルコード参考:
M5Stack用ToF測距センサユニット (Ninune-waさん)
https://github.com/msx-sample-code-space/for_msx0/tree/main/sensor/M5Unit-ToF

2023年11月20日月曜日

MSX0を分解してみた(ゲームパッドへ交換)

MSX0が手元に届いてから約1ヶ月が経ちました。
 
クラファンでタイプBを選択したので、1台はFaces IIのベースに、キーボードと本体が搭載されている状態で送られてきたのですが、このキーボードだと小さいのと入力方法が特殊だったりするので、いつもはリモートコントロールパネルを使ってデスクトップPCのキーボードで入力しています。

ゲームパッドもタクトスイッチなので動きの激しいゲームはきびしそうですが、ちょっとしたゲームをやるにはゲーム用のパッドでもいいかも?と思っていたので、今回はゲームパッドに載せ替えてみることにしました。

まずは六角レンチと六角穴付きボルトの入った袋を開封。
六角穴付きボルトはすべて同じ長さでした。
キーボードの左側は1mmくらい隙間が空いているので、まずはそこに爪を押し込んでこじ開けてみようとしますが・・・キーボードの右側がぴったりとくっついてはずせそうにありません。
↓キーボードの右側


しばらく爪でぐりぐり開けてみようとしたり、プラスチックのカードを隙間に押し込んでみたりしたのですが、ちっとも外れない。。。
 
MSX0を早速壊してしまっては困るので、作戦変更。
ディスプレイを固定している六角ボルトを4本外します。(オレンジ色の六角レンチを使用)
 
FacesIIの上部2本は長いボルトで、下側の2本は短いボルトでした。
組付けのときは間違えないように注意しよう。。。


ひとまずディスプレイは外すことができました。

 

↓Faces IIの上部(シルク印刷でピン番号などが書いてある)

 

↓本体内部
中央の左側にCPUが見えたのですが、こんなに小さいのですね。

 

ディスプレイが外れたおかげで、指を引っ掛けるところができて、
キーボード部分もやっと外すことができました。
 
さぁ、ゲームパッドをとりつけよう!・・・と思ったのですが、その前にちょっと実験。
バッテリーなしの状態で起動するか確認。
FacesIIも、バッテリーボトムもない状態で電源ON。
・・・もちろん起動せず。
 
続いて、ACアダプタに接続してあるUSBケーブルを本体につなぐと。。。
緑色ランプが点灯して起動しました。(下記写真の状態) 
 
一応この状態でも起動することを確認できました。
 
 
というわけで、なんとか無事にゲームパッドに交換することができましたが、
接続部分のピンを曲げてしまわないか心配だったので、取り外しと取付けには、かなり慎重になりました。
 
実は昔、IDE接続のHDDで、ピンをぐにゃっと曲げてしまったことがあるのです・・・。
 
まぁ、あまり頻繁に付け替えたりしないほうが無難なのかなと思っていますが、ちょこちょこ付け替えたりする人っているのだろうか。。。
 
↓ゲームパッド装着後の起動画面






2023年3月10日金曜日

3の倍数と3が付く数字の時だけアホになります [MSX]


タイトルの通り。

1から数字を数えて、3の倍数と3が付く数字の時だけアホになります。
世界のナベアツさんのネタです。

動画


実行結果

3で割り切れるときは *を表示。
3がつく数字で @を 表示します

BASICプログラム

10 'save "nabe.bas" 'for MSX2
20 SCREEN1:CLS
30 FOR I=1 TO 40
40 A = I MOD 3
50 C$ = STR$(I)
60 B = INSTR(C$,"3")
70 SET BEEP 1,4
80 IF A = 0 THEN SET BEEP 4,4:PRINT "*";
90 IF B <> 0 THEN SET BEEP 4,4:PRINT "@";
100 PRINT I:BEEP
110 FOR J=0 TO 250:NEXT J
120 NEXT I
130 PRINT "omoro-!!!":PLAY "t200o4l8cego5c4"
view raw nabe.bas hosted with ❤ by GitHub

2023年3月9日木曜日

振り子を動かす

グラフィックモードで、ページ切り替えを使ってアニメーションさせます。
ページ0とページ1でそれぞれ違う画像を描画して、ページを交互に表示させています。

実行画面

BASICプログラム

10 'save "furiko.bas"
20 'for MSX2
30 SCREEN 5:COLOR 15,4,7
40 HL=15 'hankei
50 SET PAGE 0,0
60 LINE(127,100)-(80,150),15
70 CIRCLE STEP(0,0),HL,15
80 PAINT STEP(10,10),10,15
90 '
100 SET PAGE 0,1:CLS
110 LINE(127,100)-(174,150),15
120 CIRCLE STEP(0,0),HL,15
130 PAINT STEP(10,10),10,15
140 FOR I=0 TO200:NEXTI
150 SETPAGE 1
160 FOR I=0 TO200:NEXTI
170 SETPAGE 0
180 GOTO 140
view raw furiko.bas hosted with ❤ by GitHub

2023年3月7日火曜日

SCREEN3で時計つくってみた

 

MSX BASICのSCREEN3を使って、時計を表示させてみました。
MSX0に向けてBASICをリハビリしてます。 


動画
  

MSX2にて動作確認しました。

SCREEN3を使っているだけなのでMSX1でもうごくかと思ったけど、実行してみたらエラー出ちゃいました。。。 GET TIMEのところでエラー発生。(MSX2から対応しているのだとか)

画像:MSX1にてエラー



50行目のON INTERVAL=3600 のところの数値は、60分の1秒単位で指定する。
1秒なら 60
10秒なら 600
60秒なら 3600
となる。

BASICプログラム

10 'save "clock-s3.bas"
20 SCREEN 3:COLOR 15,4,7
30 OPEN "GRP:" FOR OUTPUT AS #1
40 ON STOP GOSUB 190:STOP ON
50 ON INTERVAL=3600 GOSUB 140 '60Sec
60 GOSUB 140
70 INTERVAL ON
80 '
90 COLOR 15:PSET (64,3),4:PRINT #1,":"
100 FOR I=0 TO 300:NEXT I
110 COLOR 4:PSET (64,3),4:PRINT #1,":"
120 FOR I=0 TO 300:NEXT I
130 GOTO 90
140 GET TIME T$
150 T2$=LEFT$(T$,5)
160 LINE(0,0)-(150,30),4,BF
170 PSET(0,0),4:COLOR15:PRINT #1,T2$
180 RETURN
190 COLOR 15
view raw clock-s3.bas hosted with ❤ by GitHub