LEDでナナイロづくり

LED色設定サブルーチン

LED色設定: @SET_WS.LED(I,C,L)

1000 @SET_WS.LED(I,C,L)
1010 IF I>33 THEN I=33
1020 IF(L<1 OR L>255)AND(C%8) THEN L=20
1030 [I*3]=C&1*L
1031 [I*3+1]=C>>1&1*L
1032 [I*3+2]=C>>2&1*L
1033 RETURN

変数 I LED点灯位置
0~33 (LEDの数は最大34個まで)
———————————————————————–
変数 C 色
0■無(光らない)、1緑、2赤、3黄、4青、
シアン(青緑)、6マゼンタ(紅紫)、7
———————————————————————–
変数 L 輝度(明るさ)
1~255(範囲外は強制的に20にする。100以上はあまり変わらない)
———————————————————————–

プログラムの説明
1000 @SET_WS.LED(I,C,L)
 サブルーチンラベル
1010 IF I>33 THEN I=33

 LED数の範囲チェックです
 LED数Iが上限を超えているなら、上限値33にします
1020 IF(L<1 OR L>255)AND(C%8) THEN L=20

 輝度Lが0か255を超えているなら、20にします
 ただし色Cが0なら、なにもしません
 この判断で、光らせたくない時はCを0で使用できます
1030 [I*3]=C&1*L
1031 [I*3+1]=C>>1&1*L
1032 [I*3+2]=C>>2&1*L
 GRBの各色を作ります
 C&1 でCの0bit目(十進数では1)を論理積で取り出し、緑、黄、青緑、白の要素です(下図の光の三原色を参照)。
 C>>1&1 は1bit目(十進数では2)で、赤、黄、紅紫、白の要素となります。
 C>>2&1 は2bit目(十進数では4)で、青、青緑、紅紫、白の要素となります。
 それぞれの色の要素に輝度変数Lの値を掛けることで、フルカラーLEDを光らせる値を作ることができます。
 「色設定サブルーチン」の詳しい説明はこちらのサイトも参照してください。
1033 RETURN
 サブルーチン終了


このサブルーチンを使えば、点灯位置や色などの面倒な計算をしなくても、光らせたいLED位置(変数I)、色(変数C)を決めるだけで、LEDが鮮やかに光ってくれます。
サブルーチンでは、明るさ(変数L)も指定でき、値を指定しないとき(0のとき)でも、20をデフォルト設定します。

I=0:C=1:GSB 1000
OK
WS.LED12
OK

I=1:C=2:GSB 1000
OK
WS.LED12
OK

I=2:C=3:GSB 1000
OK
WS.LED12
OK

I=3:C=4:GSB 1000
OK
WS.LED 12
OK

I=4:C=5:GSB 1000
OK
WS.LED 12
OK

I=5:C=6:GSB 1000
OK
WS.LED 12
OK

I=6:C=7:GSB 1000
OK
WS.LED 12
OK

 □□□□□
 01234567891011



LEDを消したい時は、変数Cの色を0にします 。
たとえば、3番目のLEDを消すには、、、。

I=2:C=0:GSB 1000
OK
WS.LED 12
OK

 □□□□□
 01234567891011

すべてのLEDを消すには、配列をすべて0にします。

FOR I=0 TO 101: [I]=0: NEXT
OK
WS.LED 12
OK


※[I]=0 を [I]=RND(256) で試してみよう!!

CLV命令を使うと配列を全部0にしてくれますが、変数A~Zも0になるので注意してください (参考:CLV命令) 。

CLV
OK
WS.LED 12
OK