Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
1
Help us understand the problem. What is going on with this article?
@fuku-applil

IchigoJamの新しいWS.LEDとCOPYでピカピカ

More than 1 year has passed since last update.

IchigoJam BASIC 1.4で実装されたばかりのWS.LED命令。開発者の福野さんお手製の10連フルカラーLEDを頂いたので、ピカピカ光らせてみました。楽しい!
IMG_7788.jpg
WS.LED命令は、赤緑青それぞれの輝度を数値0〜255で配列[0][1][2]にセットして、WS.LED1とすれば一番手前のLEDを光らせることができるというもの。(数値を大きくすると不安定になる。50くらいが無難?)
同じように赤緑青を[3][4][5]にもセットしてWS.LED2とすれば手前から2個分の色を指定できるし、[29]まで全部セットしてWS.LED10とすれば10個全部を色々な色で光らせることができる。

WS.LED命令のクックブック的なの→福野さんのブログ記事

じゃあ手前から先へと色を順送りに動かしてみようと、配列を後ろへ後ろへとコピー。
最初のLEDのRの輝度が[0]に、2番目のLEDのRの輝度が[3]に保存されているので3つ先の配列要素にコピーしていけば色が順繰りに送られていくはず。

FOR I=29 TO 3 STEP -1
[I]=[I-3]
NEXT

みたいにFORを使っても良いけど、COPY命令を使った方が一行で書けて実行速度も速そう。

[0]のアドレスは#800。配列の1要素は2バイトなので[3]は#806。この2つのアドレスをコピー元とコピー先の先頭として指定、コピーする長さは最初の1個を除いたLED9個分x3(RGB)x2バイトで54バイト。

10 CLV
20 COPY #806,#800,54
30 A=INKEY()
40 [0]=A&1*40
50 [1]=A&2*20
60 [2]=A&3*10
70 WS.LED10
80 WAIT5:GOTO20

0〜7キーで色を指定して、手前のLEDから奥へと順に染まっていくプログラムを書いたつもり。しかし実行すると2つめ以降のLEDがすべて同じ色になってしまう…。なぜかというと、COPY命令は先頭から順にコピーするので

FOR I=3 TO 29
[I]=[I-3]
NEXT

と同じこと。[3]=[0]してから[6]=[3]して、[9]=[6]して…結局全部同じになってしまう。

そこで、こうするとうまく行った。

20 COPY #800+58,#800+52,-54

第三引数をマイナスにすることで、メモリアドレスを逆走しながらコピーしてくれる。そうだったらいいなーと思ってやってみたら出来た。ただしその分、アドレス指定は先頭でなく末尾を指定しないとなので計算を間違いやすい。変なとこコピーしないように気をつけよう。例えばLED5個バージョンならこう。

20 COPY #800+28,#800+22,-24

完成したプログラム。

10 CLV
20 COPY #800+58,#800+52,-54
30 A=INKEY()
40 [0]=A&1*40
50 [1]=A&2*20
60 [2]=A&3*10
70 WS.LED10
80 WAIT5:GOTO20

で、満足げにピカピカを眺めていて気づいたのだけれど、手前からじゃなく奥からにすれば簡単なのだった。

10 CLV
20 COPY #800,#806,54
30 A=INKEY()
40 [27]=A&1*40
50 [28]=A&2*20
60 [29]=A&3*10
70 WS.LED10
80 WAIT5:GOTO20

まー手前から奥に行く方が気持ちいいけどね。

自分でも作ってみた。ここでも参考にした福野さんのブログ記事
配線に向きがあるので気をつけよう。10連フルカラーLED楽しくてオススメです。メリークリスマス!
IMG_7786.jpg

1
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
1
Help us understand the problem. What is going on with this article?