やってみよう!(つなぎ方と光らせ方)
IchigoJam基板とLED基板は次の図のようにつなげます。
IchigoJam側 | LED基板側 |
VCC(3.3V) | VCC |
GND | GND |
LED | IN |
繋がない | OUT |
その場合は、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■青、
5■シアン(青緑)、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