IchigoJamで遊ぶ その3 信号機を作る
信号機っぽいものを作ろう
前回は1個のLEDを制御したので、今度は三つくらい制御してみましょう。
せっかくなので、青(緑)・黄色(橙)・赤の3色のLEDを用意して、信号機もどきにチャレンジ。
こんな感じで、前回同様にOUT1には緑色のLEDを取り付け、加えてOUT2に黄色のLED、OUT3に赤色のLEDを接続します。
前回は「OUT 1」というコマンドを使っていましたが、実はこのOUTコマンドはパラメータを二つ指定することができて、以下のように使えます。
1 2 3 |
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秒というような信号機っぽいものを作ってみました。
1 2 3 4 5 6 7 8 9 10 |
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がオンで他はオフとなるわけです。
というわけで、プログラムをこういう風に書き換えました。
1 2 3 4 5 6 7 |
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進数を知らないと余計に分かりにくくなったかも?
ただ、プログラムは短くなったので良しとします・・・してください。
おまけ・歩行者用信号機
ほとんど同じようなプログラムですけど、歩行者用信号機も作ってみました。
1 2 3 4 5 6 7 8 9 10 11 |
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 |
動き的にはこちらの方が面白いかも(笑)