IchigoJamで遊ぶ その3 信号機を作る

(投稿日:2016-03-16)

信号機っぽいものを作ろう

前回は1個のLEDを制御したので、今度は三つくらい制御してみましょう。
せっかくなので、青(緑)・黄色(橙)・赤の3色のLEDを用意して、信号機もどきにチャレンジ。

led2
こんな感じで、前回同様にOUT1には緑色のLEDを取り付け、加えてOUT2に黄色のLED、OUT3に赤色のLEDを接続します。

前回は「OUT 1」というコマンドを使っていましたが、実はこのOUTコマンドはパラメータを二つ指定することができて、以下のように使えます。

OUT 1,1  'OUT1をオンにする
OUT 2,1  'OUT2をオンにする
OUT 1,0  'OUT1をオフにする

※オンにするというのは正確には電圧をHighにする事ですが、今のところは単純にオンとオフとしておきます。

OUT 2,1 にすると黄色のLEDが光り、OUT 3,1にすると赤色のLEDが光るというわけです。
簡単ですねぇ。

で、こんなプログラムで、緑が6秒、黄色が1.5秒、赤色が6秒というような信号機っぽいものを作ってみました。

10 OUT 1,1
20 WAIT 360
30 OUT 1,0
40 OUT 2,1
50 WAIT 90
60 OUT 2,0
70 OUT 3,1
80 WAIT 360
90 OUT 3,0
100 GOTO 10

見た目はちょっとアレですけど、信号機っぽい動作になってるハズ。

プログラムが分かりづらい!

しかし、このプログラムはちゃんと動きはしますが、出力先の指定とオンとオフが入り乱れていてややこしいし、なんだか無駄に長いです。

プログラムを一端途中で止めてから再度実行すると、初期化してないので青と赤が同時に光ったりする不具合もあります。

なので、ここは複数の出力を一度にオンとオフできる方法を使ってみます。
といっても、何のことは無い(前回も使っていた) OUTコマンドをパラメータ一つで使うだけなんですけどね。

OUTコマンドをパラメータ一つのみで使うと、そのパラメータを2進数にしたときの各ビットに対応したOUT端子がオン・オフされます。
たとえば、パラメータが「6」の場合、2進数だと「00000110」なので、OUT2とOUT3がオンで他はオフとなるわけです。

というわけで、プログラムをこういう風に書き換えました。

10 OUT 1
20 WAIT 360
30 OUT 2
40 WAIT 90
50 OUT 4
60 WAIT 360
70 GOTO 10

50行目の「OUT 4」 が、OUT4端子をオンにするものと思いがちですけど、実際は「OUT3端子のみオン」にしています。

個人的には分かりやすくなったと思ってますが、2進数を知らないと余計に分かりにくくなったかも?
ただ、プログラムは短くなったので良しとします・・・してください。

おまけ・歩行者用信号機

ほとんど同じようなプログラムですけど、歩行者用信号機も作ってみました。

10 OUT 1
20 WAIT 360
30 FOR I=1 TO 5
40 OUT 0
50 WAIT 30
60 OUT 1
70 WAIT 30
80 NEXT
90 OUT 4
100 WAIT 360
110 GOTO 10

動き的にはこちらの方が面白いかも(笑)

投稿者: