目次

Cube LEDs 処理

 LEDを立方体の頂点や側辺に配置したCube LEDsが
 イルミネーションとして使われることがあります。




 IchigoJamのOUT_1からOUT_11の11ピンを利用し
 3x3x3=27個のLEDを点灯、消灯するプロ
 グラムを作成してみます。

 11ピンで、27個のLEDを点灯することは不可能なので
 外部にデコーダをつけて、2ピンで4ピン分の働きを
 させてみます。

 回路は、以下。



 ピンは、OUT_1からOUT_8を抵抗を介して、LEDに接続。

 OUT_9、OUT_10は、74HC139に接続して、2ピンを4ピンに
 拡張します。これで、8x4=32までのLEDを扱えるよう
 になります。

 特定のLEDを点灯するには、OUT_1からOUT_8で、列を選択します。
 列を決めたなら、段(行とも言えます)をOUT_9とOUT_10で指定
 すればLEDに電流が流れて、指定したLEDだけが点灯。

 OUT_9、OUT_10は、74HC139に接続して、2ピンを4ピンに
 拡張します。これで、8x4=32までのLEDを扱えるよう
 になります。

 列が8あるので、配列[1]から[8]に論理値が含まれて
 いるとして、OUT_1からOUT_8に出力するサブルーチン
 を定義すると、以下。

100 @SENDLED
110 FOR J=1 TO 8
120   OUT J,[J]
130 NEXT
140 RTN

 列の出力パターンを、上のサブルーチンで定義したので
 行の指定を考えます。

 0から3の乱数を生成して、OUT_9、OUT_10に出力すると
 うまくいくはず。

 0から3の乱数は、RND(4)で生成できるので
 得られる乱数で、OUT_9、OUT_10の出力を決定
 するサブルーチンを書きます。

200 @SEL
210 R=RND(4):OUT 9,0:OUT 10,0
220 IF R=1 OUT 9,1
230 IF R=2 OUT 10,1
240 IF R=3 GOTO @SELH
250 GOTO @SELEXT
260 @SELH
270 OUT 9,1:OUT 10,1
280 @SELEXT
290 WAIT 60
295 RTN

 LEDの点灯処理を、サブルーチンで定義したので
 サブルーチンを呼び出す側の処理を考えます。

 配列[1]から[8]に論理値を入れるとしたら、2の8乗の256通りの
 パターンになるので、乱数を利用して0から255を生成し、2進数
 に変換して対応すればよいでしょう。

 次のように定義すれば、よいはず。

10 ' Cube
20 OUT 0
30 @LOOP
40 A=RND(256)
50 FOR I=1 TO 8
60   [I] = A & 1:A = A >> 1
70 NEXT
80 GSB @SENDLED:GSB @SEL
90 GOTO @LOOP
95 END

 サブルーチンと合体。

10 ' Cube
20 OUT 0
30 @LOOP
40 A=RND(256)
50 FOR I=1 TO 8
60   [I] = A & 1:A = A >> 1
70 NEXT
80 GSB @SENDLED:GSB @SEL
90 GOTO @LOOP
95 END
100 @SENDLED
110 FOR J=1 TO 8
120   OUT J,[J]
130 NEXT
140 RTN
200 @SEL
210 R=RND(4):OUT 9,0:OUT 10,0
220 IF R=1 OUT 9,1
230 IF R=2 OUT 10,1
240 IF R=3 GOTO @SELH
250 GOTO @SELEXT
260 @SELH
270 OUT 9,1:OUT 10,1
280 @SELEXT
290 WAIT 60
295 RTN

 点灯時間は1秒としています。

 これが短いと判断したなら、290行目の
 WAITで使う値を大きくします。

 行を指定するときに、配列に0、1、2、3を
 格納しておき、必要なときに参照する方式での
 処理もできます。

10 ' Cube
20 OUT 0:GSB @INIT
30 @LOOP
40 A=RND(256)
50 FOR I=1 TO 8
60   [I] = A & 1:A = A >> 1
70 NEXT
80 GSB @SENDLED:GSB @SEL
90 GOTO @LOOP
95 END
100 @SENDLED
110 FOR J=1 TO 8
120   OUT J,[J]
130 NEXT
140 RTN
200 @SEL
210 R=RND(4)
220 R=R+10
230 OUT 9,N & 1
240 R=R >> 1
250 OUT 10,N & 1
260 WAIT 60
270 RTN
300 @INIT
310 LET [10],0,1,2,3
320 RTN

 配列[10]、[11]、[12]、[13]に値を格納しておき
 乱数でインデクスを計算。
 判定を入れないで、OUT_9、OUT_10への出力はシフト
 と論理演算で確定してます。


目次

inserted by FC2 system