この e-BASiC を Arduino に載せればいいんじゃないかと、ふと思ったけど、インタプリタを載せるにはちょっと ROM も RAM も乏しいので難しいというか、そもそもプログラミングしやすいようにできているようなので本末転倒っぽい。
そろそろ仕事で使いたいと思って、仕上げにかかってはみたが、いろいろとハマってしまい、タイムアップ。
STM32 は外部割り込みを GPIO の入力に割り当てられたりするわけやけど、「割り込みライン」と「ピン番号」が一致しないと機能しないということに気づかず、半日くらい悩んでもうた。
機能的には一致させる必要性はまったくないから、用意されたライブラリの問題やろうか。
この外部割り込みを利用した信号の検出と、あとシリアル(UART)の入出力をところだったけど、UART は UART で回路図でのピン配置に誤植があったりして、しばらく悩むハメに。
シリアルは次のように定義できるように。
COM1: UART 1 115200
入出力は次のような感じに、1 バイト毎読み書きできるようになっている。
COM1 = 'A'
(これまで 10 進数でしか指定できなかった定数を 'A' や 0x32 といった指定もできるようにした。)
CHAR = COM1 IF CHAR = 'A' LED = 1 ENDIF
そういえば、先週秋葉で部品を調達したときに買った LM60 という温度センサーを試してみた。
アナログ入力は加速度センサーと同様に
TEMP: ANALOG 4
でアナログ入力ピンを指定。
PRINT TEMP 678
といった具合に 12bit 制度で入力。
いよいよ関数(ループ)呼び出しができるようになったので、次のループで計算できるように。
TEMPVAL:VAL 0 CALC:LOOP TEMPVAL = TEMP * 3277 TEMPVAL = TEMPVAL / 1024 TEMPVAL = TEMPVAL - 1696 TEMPVAL = TEMPVAL / 25 BREAK ENDLOOP
CALC を呼び出すと TEMPVAL に 19 といった計算された温度が返ってくるように。
2 ケタの 7 セグ LED に数値を表示する関数 DEC と組み合わせて、温度計の出来上がり!
TIMER1: TIMER 10000 FLAG: VAL 0 MAIN: LOOP DEC TEMPVAL IF TIMER1 < 1000 IF FLAG = 0 CALC FLAG = 1 ENDIF ELSE FLAG = 0 ENDIF ENDLOOP