目次

エレクトリックキーヤー

 磁石に反応するリードスイッチをセンサーにし
 モールス符号を出力するエレクトリックキーヤー
 を作ってみます。

 利用するリードスイッチは、以下。



 使う磁石は、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


目次

inserted by FC2 system