目次
前
次
音出しカラクリ
IchigoJamのBasicには、BEEPという音を出す手続きが
用意されています。
BEEPの仕様は、以下。
BEEP [<周期>,<長さ>]
長さは、60で1秒になるので、1/60秒の倍数を指定します。
周期は1から255で(7850Hz/N)のNに相当するようです。
モールス符号の長点、短点は3:1の時間比をもつので
サブルーチンとして、長さを受取って音を出すように
定義すればよいでしょう。
行番号500以降に長点、短点を出すコードを入れます。
500 ' send dot or dash
510 IF A=0 GOTO 540
520 IF A=1 LET L,15
525 IF A=3 LET L,45
530 OUT 4,1:BEEP 10,L:OUT 4,0
540 WAIT 40
550 RETURN
モールス符号を出力している間は
LEDを点灯して、光でモニタします。
英字、数字を、時間の長さに変換して記憶して
おかないと、モールス符号を出力できません。
英字、数字の時間長の記憶には、配列を利用します。
長点、短点を2進数で表現し、11と01を並べて
該当する英字あるいは数字を表現します。
数字1なら、「. - - - -」なので、01 11 11 11 11と
なります。数字なら5符号で簡単にコード化できますが
英字では、1符号から4符号で固定長ではないので工夫
が必要。
11と01で表現した符号を逆順に並べておき、10ビットか
8ビットにします。その値を2ビットずつ取出して音と
して出力。1音出力したなら、2ビット右にシフトして
同じことを繰返します。
数字と英字に分けて、数字なら10ビットのコードとし
英字なら8ビットのコードにして、配列に格納します。
Aを例に8ビットコードにしてみます。
Aは、「. -」。
符号を逆順に並べ変えて、「- .」。
長点、短点を11、01とするので、「11 01」。
8ビットにまとめて、「00 00 11 01」。
16進数で表現すると、0D。
1を10ビットコードにしてみます。
1は、「. - - - -」。
符号を逆順に並べ変えて、「- - - - .」。
長点、短点を11、01とするので、「11 11 11 11 01」。
16進数で表現すると、3FD。
IchigoJamのBasicは、変数、配列は16ビットサイズと
なっているので、8ビット、10ビットのコードを変数
の中に格納できます。
配列のどこに格納するかは、ASCIIコードの並びを活用します。
PRINT CHR$(65) -> 表示は A
PRINT CHR$(48) -> 表示は 0
数字は48から格納し、英字は65から格納すれば
効率よくモールス符号の時間データを取出せます。
Aを例に、モールス符号の出力を見てみます。
- Aにより取り出せるビット列は、「00 00 11 01」。
- 下2桁が01なので、短点出力。
- ビット列を右に2ビットシフトして、「00 00 11」。
- 下2桁が11なので、長点出力。
- ビット列を右に2ビットシフトして、「00 00」。
- 下2桁が00なので、音出力なし。
- ビット列を右に2ビットシフトして、「00」。
- 下2桁が00なので、音出力なし。
1を例に、モールス符号の出力を見てみます。
- 1により取り出せるビット列は、「11 11 11 11 01」。
- 下2桁が01なので、短点出力。
- ビット列を右に2ビットシフトして、「11 11 11 11」。
- 下2桁が11なので、長点出力。
- ビット列を右に2ビットシフトして、「11 11 11」。
- 下2桁が11なので、長点出力。
- ビット列を右に2ビットシフトして、「11 11」。
- 下2桁が11なので、長点出力。
- ビット列を右に2ビットシフトして、「11」。
- 下2桁が11なので、長点出力
数字、英字に相当するビット列を取り出して
2ビットごとに区切って得られる0、1、3
をサブルーチンに与えれば、モールス符号を
出力できます。
目次
前
次