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基板には、12個のLEDが付いているので、

WS.LED 12

のように命令しましす。しかし残念ながら、これだけでは光ってくれません。
あらかじめ、LED位置に対応した配列に、RGB色の明るさを設定する必要があります(参照:RGB配列 )。


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

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

 □□□□□□□□□□□

配列[0] = 100 (緑色を明るさ100に設定)
配列[1] = 0  (赤色を明るさ0に設定 = 光らない)
配列[2] = 0  (青色を明るさ0に設定 = 光らない)

・フルカラーLEDの1個の色は、緑・赤・青各色の明るさの割合で決まります
・各色の明るさは、IchigoJamの配列に、GRB(緑赤青)の順に設定します
・各色の明るさは、0~255までの値を指定します


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

次の例では、2番目のLEDを赤色に光らせます。
明るさの値を200にしているので、緑色より明るく光ります。
1番目のLEDは配列値を変えていないので、そのまま緑色を点灯し続けます。

[3]=0:[4]=200:[5]=0
OK
WS.LED 12
OK

 □□□□□□□□□□


このように、IchigoJamのプログラムでフルカラーLEDを光らせる時は、このように配列への設定と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位置の設定を考えなくても、光らせたいLED位置(変数I)と色(変数C)を決めるだけで、LEDが鮮やかに光ってくれます。

また、サブルーチンでは、明るさ(変数L)も指定できるようにしました。指定がなければ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