LEDでナナイロづくり 2

10.五秒ごとの時計

12個のLEDサークルを、時計の秒針に見立てて光らせるプログラムです。

1秒ごとに点滅、5秒毎に点灯を繰り返して、LEDサークルを一周(1分)します。
変数Sを1秒ごとに1づつカウントアップしていきますが、このときWAIT60で待つのではなく、TICK値が60で割り切れるタイミングで1秒を判断しています。こうすることで、他の処理を実行しても、ほぼ正確に1秒ごとの処理ができるようになります。

1秒、5秒、60秒ごとに、それぞれの点滅や点灯のサブルーチンを呼び出して、時計の動きを作ります。
一周を終えると(1分経過すると)LED色を変えて繰り返します。
LED色は、緑・赤・黄・青・マジェンダ・シアン・白の順で、これを繰り返しますが、6色しかないので、6分までの時計(タイマー)として考える方がよいでしょう。

なお、「ナナイロづくり」のサブルーチンは使わず、プログラム内に同じ動作をするコードを直接埋め込みました(1230行目、1330行目)。

10 ‘LED Circular Clock by WS2812B
20 CLV
30 ?S: GSB@WAIT60:CONT

40 END

1100 @WAIT60
1110 IF S%5 GSB@WS1 ELSE GSB@WS5: IF !(S%60) GSB@WS60
1120 S=S+1
1130 IF TICK()%60 CONT
1140 WAIT2: RTN

‘1秒毎に同じ場所のLEDを点滅
1200 @WS1
1210 BEEP99,1
1220 FOR I=0 TO 1
1230 LET[S/5%12*3],C*I&1*50,C*I>>1&1*50,C*I>>2&1*50
1240 WS.LED12:WAIT5
1250 NEXT:RTN

‘5秒毎に次のLEDを点灯
1300 @WS5
1310 BEEP30
1320 @S_WS5
1330 LET[S/5%12*3],C&1*50,C>>1&1*50,C>>2&1*50
1340 WS.LED12:RTN

’60秒毎に色を変えて最初のLEDを点灯
1400 @WS60
1410 BEEP5,30
1420 FOR I=0 TO 35:[I]=0:NEXT
1430 C=C+1:IF C>7 C=1
1440 I=0:GSB@S_WS5:RTN

ヒント(2021/11/20追記)
 時計や時刻などを表示するプログラムで、1秒毎にWAIT60(プログラム中の1か所のみ)を使用している場合ならば、WAIT60をGSB@WAIT60のように置き換えると、時計表示に同期してLEDを光らせることができる場合があります。
他のプログラムに使用するときは、変数名が重ならないよう注意してください。

たとえば、SHIRO氏の作られている「ラーメンタイマー」などは、同期してLEDサークルを光らせることができます。
リンク先のプログラムに続けて、このプログラムの1100行目以降を入力し、次の行を追加してください。

170 GSB@WAIT60
900 END
https://www.ichigojaman.jp/entry/ramentimer

同様に「ロゴクロック」も同じように光らせることができます。

250 GSB@WAIT60
900 END
https://www.ichigojaman.jp/entry/20191209/1575818370

※Thank’s SHIRO-san


この教材は「Creative Commons — CC BY-SA 4.0」の下に提供されています。