JH1LHVの雑記帳

和文電信好きなアマチュア無線家の雑記帳

スポンサーリンク

micro:bit で morse を鳴らす ~その2~

前回のプログラムを少し改修して、「CW コールサイン・トレーナ」を作ってみました。

圧電スピーカは、A0 と GND 端子に接続してください。
電源投入でランダムで構成されたコールサインが連続で流れます。

CW の速度は A、B ボタンで変更可能です。 
A ボタンで速く(「+」表示)、Bボタンで遅く(「ー」表示)なります。

あと、LED のドット表示で多少見にくいですが、アルファベットも表示するようにしておきました。

 

f:id:JH1LHV:20180515224455j:plain


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 トレーナ企画ですが・・・もう少し続くと思います。
皆さんも、購入して遊んでみるのは如何でしょうか。