目次

Square LEDs 処理

 micro:bitには、5x5に赤LEDを配置し
 ディスプレイとして利用しています。




 IchigoJamのOUT_1からOUT_10の10ピンを利用し
 5x5=25個のLEDを点灯、消灯するBASICの
 プログラムを作成してみます。

 回路は、以下。



 ピンは、OUT_1からOUT_5を抵抗を介して、LEDに接続。

 OUT_6からOUT_10は、バイポーラトランジスタを
 ドライバとして、LEDの電流を流しています。

 特定のLEDを点灯するには、OUT_1からOUT_5で、列を選択します。
 列を決めたなら、段(行とも言えます)をOUT_6からOUT_10で指定
 すればLEDに電流が流れて、指定したLEDだけが点灯。

 単純なカラクリで動かすので、OUT_1からOUT_5に出力するサブルーチン
 を定義すると、以下。

200 @SENDLED
210 FOR J=1 TO 5
220   OUT J,[J]
230 NEXT
240 RTN

 配列[1]から[5]に、出力パターンを格納し処理します。
 この分割は、次のサブルーチンで処理。

100 @CUT
110 LET [0],A
120 FOR J=5 TO 1 STEP -1
130   [J] = [0] & 1
140   [0] = [0] >> 1
150 NEXT
160 RTN

 行を指定するには、次のサブルーチンで対応

300 @CONTROL
310 FOR J=6 TO 10
320   OUT J,0
330 NEXT
340 OUT B+6,1
350 RTN

 ここまでサブルーチンを用意できたら
 配列[10]から[14]にパターンを入れて
 表示させることを考えます。

 2進数でパターンを作って、配列に格納してから
 表示を繰り返すようにします。

 次のアイコンに似たパターンを表示するため
 配列に格納する値を考えます。



 黒で描いた部分を点灯するとすれば
 2進数で次のようにまとめられます。



 パターンは、LETを利用して格納します。

10 LET [10],`11011,`00000,`10101,`01010,`00100

 パターンを格納してしまえば、サブルーチンを
 利用して繰り返すだけになります。

10 ' SQUARE DRAW
20 LET [10],`11011,`00000,`10101,`01010,`00100
30 @LOOP
40 FOR I=10 TO 14
50   A=[I] : B=I-10
60   GSB @CUT : GSB @SENDLED : GSB @CONTROL
70 NEXT
80 IF BTN() GOTO @EXIT
90 GOTO @LOOP
92 @EXIT
94 FOR I=1 TO 10:OUT I,0:NEXT
96 END

 まとめます。

10 ' SQUARE DRAW
20 LET [10],`11011,`00000,`10101,`01010,`00100
30 @LOOP
40 FOR I=10 TO 14
50   A=[I] : B=I-10
60   GSB @CUT : GSB @SENDLED : GSB @CONTROL
70 NEXT
80 IF BTN() GOTO @EXIT
90 GOTO @LOOP
92 @EXIT
94 FOR I=1 TO 10:OUT I,0:NEXT
96 END
100 @CUT
110 LET [0],A
120 FOR J=5 TO 1 STEP -1
130   [J] = [0] & 1
140   [0] = [0] >> 1
150 NEXT
160 RTN
200 @SENDLED
210 FOR J=1 TO 5
220   OUT J,[J]
230 NEXT
240 RTN
300 @CONTROL
310 FOR J=6 TO 10
320   OUT J,0
330 NEXT
340 OUT B+6,1
350 RTN

 サブルーチンをひとつにすると以下。

10 ' SQUARE DRAW
20 LET [10],`11011,`00000,`10101,`01010,`00100
30 @LOOP
40 FOR I=10 TO 14
50   A=[I] : B=I-10 : GSB @LEDHND
60 NEXT
70 IF BTN() GOTO @EXIT
80 GOTO @LOOP
90 @EXIT
92 FOR I=1 TO 10:OUT I,0:NEXT
94 END
100 @LEDHND
110 LET [0],A
120 FOR J=5 TO 1 STEP -1
130   [J] = [0] & 1 : [0] = [0] >> 1
140 NEXT
150 FOR J=1 TO 5 : OUT J,[J] : NEXT
160 FOR J=6 TO 10 : OUT J,0 : NEXT
170 OUT B+6,1
180 RTN

 手持ちのLEDを使って、専用基板を半田付け
 すると、次のようになりました。

top face



bottom face



 OUT命令は、ピン番号を指定しない記述もできるので
 その表現でプログラムを書き直してみると、以下と
 なります。

10 ' SQUARE DRAW
20 LET [0],`11011,`00000,`10101,`01010,`00100
30 @LOOP
40 FOR I=0 TO 4
50   A=[I] : B=I+5 : A = A + (1 << B)
70   OUT A:WAIT 5
80 NEXT
90 IF BTN() GOTO @EXIT
92 GOTO @LOOP
94 @EXIT
96 OUT 0
98 END


目次

inserted by FC2 system