Tako can fry!

とほほ・・・

e-BASiC (7) 温度計のプログラム

この 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