JPW2022:ナナイロイルミネーション

4.プログる

フルカラーLEDを光らせましょう。

プログラムでは、フルカラーLED1個につき配列を3つを使います。
LEDイルミネーションには8個のLEDが付いているので、3×8=24個の配列([0]~[23])が必要です。

1個目のフルカラーLEDを光らせるには、配列[0]に緑色、配列[1]に赤色、配列[2]に青色と、それぞれの明るさの値を0~255の範囲で設定します。
実際の光の色は、緑、赤、青のそれぞれの明るさの組合せで決まります。

例えば40行目では、3番目のフルカラーLEDを、明るさ50の緑色と赤色、青色は光らない設定にしています。こうすると、そのフルカラーLEDは黄色に光ります。

10 CLV:WS.LED 8
20 LET[3*0],50,0,0
30 LET[3*1],0,50,0
40 LET[3*2],50,50,0
50 LET[3*3],0,0,50
60 LET[3*4],50,0,50
70 LET[3*5],0,50,50
80 LET[3*6],50,50,50
90 LET[3*7],0,0,0
100 WS.LED 8


しかし、配列に緑赤青の色を設定してイルミネーションを作るのは、ちょっと大変です。
そこで、「LEDでナナイロづくり 2」の「イルミネーション」と同じプログラムを使い、簡単に色づくりができるようにします。

10行目から130行目までがメインルーチンで、イルミネーションの色や光の動きかたをプログラムしています。
1000行目以降がサブルーチン群で、色のパターンを配列に展開したり、光の動き方を定義したりするプログラムの集まりです。

つぎのプログラムを入力したら、間違いがないか確かめて、RUNしてみましょう。
このプログラムは、変数(S,W,L)の値を変えるだけで、イルミネーションの光り方を変えることができます。

10 CLS:BEEP
20 ‘
30 S=”01234567″
40 W=60
50 L=20
60 R=LEN(S)
70 ‘
80 GSB @STR_WS.LED(S,(I,C,L))
90 WS.LED LEN(S)
100 WAIT W
110 GSB @SHIFT_WS.LED(R)
120 IF BTN() CONT
130 GOTO 90

1000 @SET_WS.LED(I,C,L)
1010 IF I>33 THEN I=33
1020 IF (L<1||L>255)&&(C%8) THEN L=20
1030 LET[I*3],C&1*L,C>>1&1*L,C>>2&1*L
1040 RETURN

3000 @STR_WS.LED(S,(I,C,L))
3010 FOR I=0 TO LEN(S)-1
3020 C=ASC(S+I)-48
3030 GOSUB @SET_WS.LED(I,C,L)
3040 NEXT
3050 RETURN

4000 @SHIFT_WS.LED(R)
4010 IF R<0 THEN GOTO @WSREV
4020 COPY #700,#800,R*6:COPY#806,#700,R*6
4030 LET[0],[R*3],[R*3+1],[R*3+2]:RETURN
4040 @WSREV:R=-R
4050 LET[R*3],[0],[1],[2]
4060 COPY #700,#806,R*6:COPY#800,#700,R*6:R=-R:RETURN


30行目でイルミネーションの色パターンを決めます。

30 S=”01234567″

この色パターンは、80行目でサブルーチン@STR_WS.LED(A,(I,C,L))を実行することで、配列に色を設定します。
そして、90行目のWS.LED命令で、実際にLEDを光らせています。
その後、100行目のWAIT命令で待ち、110行目のサブルーチン@SHIFT_WS.LED(R)を実行する毎に、配列を移動して、下記の色パターンを繰り返します。

1)■
2)□■
3)□■
4)□■
5)□■
6)□■
7)□■
8)□■