1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

IchigoJamAdvent Calendar 2022

Day 2

【IchigoJam】フルカラーLEDを紫色に光らせるには

Posted at

先日、こんなツイートを目にした。

そこで、フルカラーLEDを紫色に光らせるにはどうしたら良いかを考えてみた。
紫色といえば高城れに…?
あまり複雑なことは考えたくないので、「無限の猿」を使うのが良さそうだと考えた。

無限の猿

無限の猿 (と自分が呼んでいるもの) は、以下のアルゴリズムである。

  1. 解を何個か適当に生成する
  2. 生成された解の中から「一番いい」ものを選ぶ
  3. 選んだ解をちょっとだけ変えて、他の解を何個か適当に生成する
  4. 2に戻る

これを繰り返していくと、けっこういい感じの解になりがちである。

無限の猿でWS2812を設定する

WS2812は、マイコン内蔵(電源に加えて信号線1本で制御可能)のフルカラーLEDであり、IchigoJam 1.4.0 以降で制御に対応している。
今回は、このWS2812が8個連なったハードウェアを用い、色の設定値に対して無限の猿を適用する。

WS2812が8個連なったハードウェア

具体的には、以下のプログラムを用いる。

10 ' イロザル
20 FOR I=0 TO 23
30 [I]=RND(256)
40 NEXT
50 WS.LED 8
60 K=INKEY()
70 IF K<48 OR 56<K GOTO 60
80 IF INKEY()<>0 GOTO 80
90 IF K=48 ?"RESET":GOTO 20
100 K=K-49
110 ?[K*3];",";[K*3+1];",";[K*3+2]
120 FOR I=0 TO 7
130 IF I=K GOTO 200
140 FOR J=0 TO 2
150 V=[K*3+J]+RND(63)-31
160 IF V<0 V=0
170 IF V>255 V=255
180 [I*3+J]=V
190 NEXT
200 NEXT
210 GOTO 50

20~40行目で初期解をランダムに生成し、50行目でそれをLEDに反映させる。
さらに、60~80行目でどの色が「一番良い」かを1~8のキーで選択させている。
0のキーが押された場合は、リセットしてまた初期解をランダムに生成する。(90行目)
1~8のキーが押された場合は、その設定値を出力し(110行目)、
「選ばれた解から少し変えた解」をランダムに生成する。(120~200行目)
なお、設定値は「緑、赤、青」の順番である。

WS2812の電源を接続し、DINをIchigoJamのLED端子に接続してから、プログラムを実行する。
例えば、初期解はこのようにバラバラな色になっている。
(そのままだと明るすぎたので、ティッシュを巻いている)

初期解

この中から紫色に近いと思う色を選ぶと、このようにそれに近い色が生成される。

1手進めた状態

これを繰り返していくことで、良いと感じる色に近付いていけることが期待できる。

おまけ

今回のプログラムのJavaScript版を作成した。
上に並んでいる8個の四角をクリックすることで、色を選択する。
色を選択すると、近い色が生成されるとともに、選択した色とそのカラーコードが下に表示される。

See the Pen Color Monkey by MikeCAT (@mike_cat) on CodePen.

おわりに

IchigoJamはjig.jpの登録商標です。

1
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?