3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

micro:bit でモールス信号に挑戦

Last updated at Posted at 2018-01-24

温度の通信ができたので気をよくして、他に何か通信したくて、なんと無謀にもモールス信号に挑戦しようと考えた。

今回のルール

  • 通信文字はアルファベット(A - Z)
  • 2 つのボタンでトン・ツーを表現する (A ボタン - トン、B ボタン - ツー)
  • 文字と文字の間は振る
  • AB ボタンを両方押したら単語の終了、送信

先に Delphi でプロトタイプを作ってみた

むむ、配列の初期値設定は

変数の定義と、配列の値設定で 2 要素の設定はできるのだが、アルファベットの 26 個分設定したい。
結局ベースをブロックで作って、Javascript 側に変換して、コードを記述する方法で対応した。
mbit01.png

アルファベットとモールス信号の対応表

2 つの配列を作って、それぞれに文字を設定して、要素の番号で同期させるようにする

モールス符号 アルファベット
AB A
BAAA B
BABA C
BAA D
A E
AABA F
BBA G
AAAA H
AA I
ABBB J
BAB K
ABAA L
BB M
BA N
BBB O
ABBA P
BBAB Q
ABA R
AAA S
B T
AAB U
AAAB V
ABB W
BAAB X
BABB Y
BBAA Z

コードはこうなった

let mWord: string[] = []
let mList = ""
let mAlpha: string[] = []
let mCount = 0
let mInWord = ""
input.onButtonPressed(Button.A, () => {
    mList = "" + mList + "A"
})
input.onButtonPressed(Button.B, () => {
    mList = "" + mList + "B"
})
input.onButtonPressed(Button.AB, () => {
    basic.showString(mInWord)
    radio.sendString(mInWord)
    mInWord = ""
    mList = ""
})
radio.onDataPacketReceived( ({ receivedString: mInWord }) =>  {
    basic.showString(mInWord)
})
input.onGesture(Gesture.Shake, () => {
    basic.showString(mList)
    for (let mCount = 0; mCount <= 25; mCount++) {
        if (mList == mWord[mCount]) {
            mInWord = "" + mInWord + mAlpha[mCount] + ""
        }
    }
    mList = ""
})
mAlpha = ["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"]
mWord = ["AB", "BAAA", "BABA", "BAA", "A", "AABA", "BBA", "AAAA", "AA", "ABBB", "BAB", "ABAA", "BB", "BA", "BBB", "ABBA", "BBAB", "ABA", "AAA", "B", "AAB", "AAAB", "ABB", "BAAB", "BABB", "BBAA"]
mList = ""
mInWord = ""
mCount = 0
radio.setGroup(1)
basic.forever(() => {
	
})

ブロックエディタ側だと結構複雑っぽかったが、コードはなんかシンプル

動かしてみた

先に、H(AAAA) シェイク E(A) シェイク L(ABAA) シェイク L(ABAA) シェイク O(BBB) シェイク で HELLO の単語は作ってあり、最後に ABボタンを押して転送するところだけ動画になっています。

microMorse.gif

余談

もくもく会で作っていたら、同じ無線グループ番号を使っていて、意図しない通信が発生するというハプニングが発生した
が、怪我の功名で、同じ無線グループ番号送信用 micro:bit を複数用意すれば、いろんなコントロールもできるんじゃね?的な発想に発展し、たぶんこれで micro:bit リモコンタンクを作ってくれるだろうと期待 ( 他力本願 )

なお、次回のもくもく会は 2018年1月30日 です!

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?