前回のプログラムを少し改修して、「CW コールサイン・トレーナ」を作ってみました。
圧電スピーカは、A0 と GND 端子に接続してください。
電源投入でランダムで構成されたコールサインが連続で流れます。
CW の速度は A、B ボタンで変更可能です。
A ボタンで速く(「+」表示)、Bボタンで遅く(「ー」表示)なります。
あと、LED のドット表示で多少見にくいですが、アルファベットも表示するようにしておきました。

micro:bit :MicroPython で morse Callsign Trainer
# by JH1LHV
from microbit import *
from random import randrange
dot_speed = 60
pin0.set_analog_period_microseconds(1500)
morsetab = {
'A': '.-',
'B': '-...',
'C': '-.-.',
'D': '-..',
'E': '.',
'F': '..-.',
'G': '--.',
'H': '....',
'I': '..',
'J': '.---',
'K': '-.-',
'L': '.-..',
'M': '--',
'N': '-.',
'O': '---',
'P': '.--.',
'Q': '--.-',
'R': '.-.',
'S': '...',
'T': '-',
'U': '..-',
'V': '...-',
'W': '.--',
'X': '-..-',
'Y': '-.--',
'Z': '--..',
'0': '-----',
'1': '.----',
'2': '..---',
'3': '...--',
'4': '....-',
'5': '.....',
'6': '-....',
'7': '--...',
'8': '---..',
'9': '----.',
' ': ' ',
'?': '..--..',
';': '-.-.-.',
':': '---...',
'-': '-....-',
'/': '-..-.',
'(': '-.--.-',
')': '-.--.-',
'_': '..--.-',
}
prefix = ["JA", "JH", "JR", "JE", "JF", "JG", "JI", "JJ", "JK", "JL", "JM", "JN", "JO", "JP", "JQ", "JS", "7J", "7K", "7L", "7M", "7N", "JD", "8J"]
def dot():
pin0.write_analog(500)
sleep(dot_speed)
pin0.write_analog(0)
def dash():
pin0.write_analog(500)
sleep(dot_speed * 3)
pin0.write_analog(0)
while True:
r = randrange(len(prefix)-1)
suffix =""
for c in range(3):
suffix = suffix + chr(ord('a') + randrange(26))
call = prefix[r] + str(randrange(10)) + suffix
for m in call.upper():
if button_a.is_pressed():
display.scroll("+")
dot_speed -= 3
elif button_b.is_pressed():
display.scroll("-")
dot_speed += 3
for c in morsetab[m]:
if c == '.':
dot()
elif c == '-':
dash()
sleep(dot_speed)
sleep(dot_speed * 3)
display.show(m)
sleep(dot_speed * 7)
こんな感じに聞こえます。
プログラムも短く、難しいことは何もやってません。。。
このプログラムでチャンと動いているので、このままコピペして大丈夫です。
この micro:bit の CW トレーナ企画ですが・・・もう少し続くと思います。
皆さんも、購入して遊んでみるのは如何でしょうか。