LEDでナナイロづくり

やってみよう!

(つなぎ方と光らせ方)

IchigoJam基板とLED基板は次の図のようにつなげます。

IchigoJam側LED基板側
VCC(3.3V)VCC
GNDGND
LEDIN
繋がないOUT
※LEDの数が多いと、IchigoJamの3.3V電源では不足する場合があります。
その場合は、LED基板のVCCを、IchigoJam基板のCN5の5Vに繋いで、USBから電源をもらうようにしてもOKです。USB電源は5Vですが、LED部品のWS2812B自体は5V品なので問題はありません。

LEDを光らせる、新しいIchgoJamの命令はつぎのとおりです(参考:WS.LED命令) 。

WS.LED 光らせるLED数 [, 繰り返し数]

しかし、残念ながらこれだけでは光ってくれません。
あらかじめ、LED位置に応じた配列番号に、RGB値で色を設定しておく必要があるのです(参照:RGB Wikipedia )。

次の例では、1番目のLEDが緑色に光ります。

[0]=100:[1]=0:[2]=0
OK
WS.LED 12
OK

配列[0] = 100 (緑色を明るさ100で設定)
配列[1] = 0  (赤色を明るさ0で設定 = 光らない)
配列[2] = 0  (青色を明るさ0で設定 = 光らない)
・配列の順序はGRB(緑赤青)の順になっていることに注意してください
・GRB3色の光の明るさの割合で色が決まります
・明るさの値は0~255までの範囲で指定します

2番目のLEDを光らせるときは、配列[3],[4],[5]にGRB値を設定して、WS.LED命令を実行します(参考:配列


 しかし、この方法では色の組み合わせが約1600万色(256色×256色×256色)もあり、LEDの位置を指定する配列も複雑なため、プログラミングするのには難しいのです。
そこで、色を7色に限定して、さらに光らせたいLEDの位置も簡単に指定できるように「LED色設定」サブルーチンを作りました(参考:GOSUB,GSB命令)。

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以上はあまり変わらない)
———————————————————————–
※ここでは「色設定サブルーチン」の詳しい説明はしません。別サイトのこちらで説明していますので詳細を知りたい方は参考にしてください。


これで面倒な配列順番と色の組み合わせを考えなくても、光らせたいLED位置(変数I)と色(変数C)を決めるだけで、LEDが鮮やかに光ってくれます。

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


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

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

すべての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