目次
前
エレクトリックキーヤー
磁石に反応するリードスイッチをセンサーにし
モールス符号を出力するエレクトリックキーヤー
を作ってみます。
利用するリードスイッチは、以下。
使う磁石は、100円ショップで入手。
リードスイッチを、2個使い長点と短点の
どちらを出力するのかを決めます。
IchigoJamの入力は、IN_1、IN_2を利用。
エレクトリックキーヤーの長点と短点は
基板上のLEDの光っている時間の長さで
変わるようにしてみます。
サブルーチンで長点と短点の違いを作って
みると、以下。
200 @FLASH
210 IF W=0 GOTO @FEXIT
220 LED 1
230 WAIT W
240 @FEXIT
250 LED 0
260 RETURN
光っている時間の長さは、サブルーチンを
呼び出す方で決めて貰うことにしましょう。
どちらのリードスイッチが反応したのかは
スイッチの状態を何度か読んで、変化して
いたらとします。
こちらもサブルーチンにします。
100 @GET
110 S=S << 1:L=L << 1
120 S=S & 3:L=L & 3
130 [1]=IN(1):[2]=IN(2)
140 IF [1]=1 S=S | 1
150 IF [2]=1 L=L | 1
160 WAIT 10
170 RETURN
サブルーチンを呼び出す方では、S、Lの値を
見てWに入れる値を決めます。
次のようなプログラムでよいでしょう。
10 ' test11
20 S=0:L=0
30 @LOOP
40 W=0:GSB @GET
50 IF S=1 LET W,40:IF L=1 LET W,120
60 GSB @FLASH
70 IF BTN() GOTO @EXIT
80 GOTO @LOOP
90 @EXIT
95 END
モールス符号では、長点の時間としての
長さは、短点の3倍と規定があるので
それに合わせて、Wの値を変えています。
3つのコードを組み合わせると、以下。
10 ' test11
20 S=0:L=0
30 @LOOP
40 W=0:GSB @GET
50 IF S=1 LET W,40:IF L=1 LET W,120
60 GSB @FLASH
70 IF BTN() GOTO @EXIT
80 GOTO @LOOP
90 @EXIT
95 END
100 @GET
110 S=S << 1:L=L << 1
120 S=S & 3:L=L & 3
130 [1]=IN(1):[2]=IN(2)
140 IF [1]=1 S=S | 1
150 IF [2]=1 L=L | 1
160 WAIT 10
170 RETURN
200 @FLASH
210 IF W=0 GOTO @FEXIT
220 LED 1
230 WAIT W
240 @FEXIT
250 LED 0
260 RETURN
LEDの光だけの処理だと、無線機を操作
できないので、次の回路で、無線機と
接続できるようにします。
OUT命令で、トランジスタのベースに
電圧を与えればよいのでサブルーチン
の一部を変更して対応。
200 @FLASH
210 IF W=0 GOTO @FEXIT
220 LED 1:OUT 1,1
230 WAIT W
240 @FEXIT
250 LED 0:OUT 1,0
260 RETURN
このサブルーチンを変更した場合は
次のようになります。
10 ' test11a
20 S=0:L=0:OUT 1,0
30 @LOOP
40 W=0:GSB @GET
50 IF S=1 LET W,40:IF L=1 LET W,120
60 GSB @FLASH
70 IF BTN() GOTO @EXIT
80 GOTO @LOOP
90 @EXIT
95 END
100 @GET
110 S=S << 1:L=L << 1
120 S=S & 3:L=L & 3
130 [1]=IN(1):[2]=IN(2)
140 IF [1]=1 S=S | 1
150 IF [2]=1 L=L | 1
160 WAIT 10
170 RETURN
200 @FLASH
210 IF W=0 GOTO @FEXIT
220 LED 1:OUT 1,1
230 WAIT W
240 @FEXIT
250 LED 0:OUT 1,0
260 RETURN
トランジスタと接続する部分に、ブザーを
つけると、音でモニタできます。
IchigoJamには、音を出力するブザーを
つけることもできるので、LEDの光では
なくて、ブザーを鳴らすように変えて
みると、次のように書けばよいでしょう。
10 ' test11b
20 S=0:L=0:
30 @LOOP
40 W=0:GSB @GET
50 IF S=1 LET W,40:IF L=1 LET W,120
60 GSB @BUZ
70 IF BTN() GOTO @EXIT
80 GOTO @LOOP
90 @EXIT
95 END
100 @GET
110 S=S << 1:L=L << 1
120 S=S & 3:L=L & 3
130 [1]=IN(1):[2]=IN(2)
140 IF [1]=1 S=S | 1
150 IF [2]=1 L=L | 1
160 WAIT 10
170 RETURN
200 @BUZ
210 IF W=0 GOTO @BEXIT
220 BEEP 10,W
230 @BEXIT
240 RETURN
目次
前