目次

音出しカラクリ

 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を例に、モールス符号の出力を見てみます。
  1. Aにより取り出せるビット列は、「00 00 11 01」。
  2. 下2桁が01なので、短点出力。
  3. ビット列を右に2ビットシフトして、「00 00 11」。
  4. 下2桁が11なので、長点出力。
  5. ビット列を右に2ビットシフトして、「00 00」。
  6. 下2桁が00なので、音出力なし。
  7. ビット列を右に2ビットシフトして、「00」。
  8. 下2桁が00なので、音出力なし。
 1を例に、モールス符号の出力を見てみます。
  1. 1により取り出せるビット列は、「11 11 11 11 01」。
  2. 下2桁が01なので、短点出力。
  3. ビット列を右に2ビットシフトして、「11 11 11 11」。
  4. 下2桁が11なので、長点出力。
  5. ビット列を右に2ビットシフトして、「11 11 11」。
  6. 下2桁が11なので、長点出力。
  7. ビット列を右に2ビットシフトして、「11 11」。
  8. 下2桁が11なので、長点出力。
  9. ビット列を右に2ビットシフトして、「11」。
  10. 下2桁が11なので、長点出力
 数字、英字に相当するビット列を取り出して  2ビットごとに区切って得られる0、1、3  をサブルーチンに与えれば、モールス符号を  出力できます。
目次

inserted by FC2 system