半導体部品の追加なしにLEDレベルメータを試作してみました。
IchigoJamには出力端子(OUTピン)が6本しかありません(LEDは10個)。このような場合、通常、レベルメータ専用ICなどを使いますが、ここでは専用ICを使わずに、ダイナミック点灯という方法を用いました。
ダイナミック点灯とは、LEDを高速に点滅させ、あるLEDが消灯している間に、他のLEDを点灯させることで、少ないピン数で多くのLEDを制御する方法です。またLEDの極性を利用して切り替えスイッチを不要にしています。
これにより個々のLEDの自由な点灯(1024通りの表示パターン)を行うことが出来ますので、単にレベルを表示するだけでなく、LEDだけを使った簡単なゲームへの応用も可能です。
ただし、IchigoJamの場合はBASICの速度が遅いのでLED点滅による「ちらつき」が生じる欠点もあります。キーボードの「V」キーを押すとビデオ表示が止まり、ちらつきを改善することができます(9/13 追記)。また、なるべく明るいLEDを使用したほうが、点滅が目立ちにくくなるようです。
写真の上部のジャンパーワイヤーのIchigoJamとの配線は、一番左から順に、OUT6、OUT1、OUT2、OUT3、OUT4、OUT5です。VCCやGNDには接続しません。
IchigoJamのOUT1~5を抵抗経由して5個のLEDに接続します。これら5個のLEDの反対側の端子5つを束ねてOUT6に接続します。写真では束ねるためのジャンパー線が抵抗の下にあって分かりにくいですが、ブレッドボード位置a~eの16~20番の5端子をショートし、OUT6に接続します。
残りの5個のLEDについてはLEDの極性が反対になるように接続します。こちらはブレッドボード位置f~jの11~15番をOUT6に接続します。
以下はサンプルプログラムです。行番号110の部分でダイナミック点灯の制御を実行しています。
サンプルプログラム:
1 'LED10
2 'L=LED M=MX N=Number
10 L=#3FF :M=0: N=10
20 V=1:'VIDEO
30 ?"Usage:";
40 ?"Press Num/Arrow/V/Q key"
100 'LOOP
110 ifmoutl&31elseoutl>>5&31^31+32
120 m=!m:i=inkey():ifi=0goto110
200 'KEY
210 IF I>47 AND I<58 LET N,I-48
220 IF I=30 AND N<10 LET N,N+1
230 IF I=31 AND N>0 LET N,N-1
240 IF I=86 LET V,!V:VIDEO V
250 IF I=81 VIDEO 1:END
260 L=1<<N-1
270 ? HEX$(N,1),BIN$(L,10),I
280 GOTO 100'(2015/9/13 修正)
このハードウェアをIchigoJam用の拡張基板で作成すれば、例えば、aitendoのai.shuttle.Jam(参考:https://bokunimo.net/ichigojam/solderingAi.html )での、打ち上げ遊び(参考:http://d.hatena.ne.jp/shiro0922/20150904/1441365326)も出来るかもしれません。
by ボクにもわかるIchigoJam