IchigoJamで作ってみましょう!
ひとまずテレビやミニモニターで動き、本体のボタンだけで時刻設定できる置き時計を目指します。
時間、分、秒をそれぞれ変数H,M,Sにいれるとします。
まずは適当な時間を設定して、表示してみましょう。
10 H=12:M=54:S=0 20 ?H;":";M;";":S RUN
セミコロンを使って、コロンで囲んだ表示ができますね。
秒針を進めてみます。
30 S=S+1 40 GOTO20 RUN
60秒を越えて、すごい勢いで時間が進みます!
60秒になったら、分を進め、60分になったら時間を進め、24時になったら0時に戻しましょう。
35 IF S=60 S=0:M=M+1:IF M=60 M=0:H=H+1:IF H=24 H=0
桁が揃っていないのが気になるので、DEC$を使って2桁に揃えます。
20 ?DEC$(H+100,2);":";DEC$(M+100,2);":";DEC$(S+100,2)
100を加えることで空きが0で埋まります。ついでにHもMも揃えておきました。
流れるような表示ではなく、その場で表示するよう、CLSとLCで整えます。
11 CLS 15 LC0,2 40 GOTO15
VIDEOコマンドを使って大きく表示!
12 VIDEO5
大きな画面のままだとプログラミングはしにくいので、F8キーまたはVIDEO1で戻します。
ちゃんと時計になるように、秒を1秒ごとに増やすように変更します。
25 IF TICK()<60 CONT ELSE CLT
時間をみて1秒(=60)になっていなければその行を繰り返し(CONT)、超えていれば時間をリセット。
時計の基本形は、できあがり!
時刻の調整をプログラムをいじらず行えるようにしたい?
まずはシンプルなキーボードで変更する方法
36 IF BTN() GSB100 100 INPUT"H:",H 110 INPUT"M:",M 102 S=0:CLS:RTN
本体のボタンを押すと(IchigoJam web なら画面をタッチかマウスでクリックすると)、時間と分を入力して設定できるプログラム(サブルーチン)を呼び出します(GOSUB/GSB ゴーサブ)
設定がおわったらRTN(RETURN リターン) コマンドでメインプログラムに戻ります。
キーボードも使わず、ボタンだけで時刻設定できたらかっこいいですね!
100 @SCLK:T=TICK()+30 110 IF TICK()<T IF BTN() CONT ELSE RTN 120 LED1:S=0:GSB@VCLK 130 IF BTN() CONT 140 IF BTN()=0 CONT ELSE CLT 150 IF TICK()<30 IF BTN() CONT ELSE H=H+1-24*(H=23):GSB@VCLK:GOTO140 160 LED0:WAIT10:LED1 170 IF BTN() CONT 180 IF BTN()=0 CONT ELSE CLT 190 IF TICK()<30 IF BTN() CONT ELSE M=M+1-60*(M=59):GSB@VCLK:GOTO180 200 LED0 210 IF BTN() CONT 220 CLT:RTN
ボタンを長押しすると時刻設定モードになりますが、Line error がでます。
時刻設定中にも時計表示をしたいので、@VCLK という名前でサブルーチンを作りましょう。
LIST 15,20 300 @VCLK:LC0,2 310 ?DEC$(H+100,2);":";DEC$(M+100,2);":";DEC$(S+100,2) 15 GSB@VCLK 20
15行と20行の行番号を編集して、@VCLKというラベルを付けたサブルーチンにします。
この表示部分をいろいろ変更して、オリジナル感を高めましょう。PanCakeを使ってカラーにする?LEDやサーボを使うのも楽しそう!
時刻設定部分のプログラム、じっくり読んだり、いろいろいじって解析してみるといいですよ!
0.5秒(30TICK)押して、時刻設定モード、短くおして時間を変更、0.5秒以上長押しすると分設定、更に0.5秒以上押して時計に戻しています。
今回作った時計はあまり正確ではないので、しばらくするとずれていくはずです。ズレを観測して楽しんでみるもよし、なんとか調整するもよし。 RTCという時計用の部品、電波時計モジュール、GPS、IchigoSodaを使うなど、いろんな手があります。(RTCを使った例、リレーとRTCとIchigoJamで改造、自動ネコゴハンマシン)
どんな大きなシステムやプログラムも、小さなシステムやプログラムの集合に過ぎません。
良い夏休みを!
links
- 作例、二五進法LED置き時計