目次
前
次
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
目次
前
次