目次
前
次
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への出力はシフト
と論理演算で確定してます。
目次
前
次