こんばんは。
さいぞうです。
Arduino入門連載の5回目だ。
前回はArduinoでLEDを点滅させるという初歩の初歩でふざけてLチカモンスターを作って楽しかった。
hollywis.hatenablog.com
今回やることは、実は前回とほとんどからない。
参考にしているチュートリアルのタイトルは、
前回はChapter 2 Blink LED
今回はChapter3 LED Blink
何が違うのか全然わからない。
なので、チュートリアルは無視して、今ある知識だけで作れる応用として、さっき思いついたモールス信号練習機を作ろうと思う。
回路を組む
抵抗をかませる
ここは前回と全く同じでも構わないのでなのでそちらを見てほしい。
一応、チュートリアルでは前回と違い220オームの抵抗を噛ませている。
使ってるセットを探してみると、220オームのはなかった…
Arduinoをはじめよう 互換キット UNO R3対応互換ボード 初心者専用実験キット 基本部品セット20 in 1
- 出版社/メーカー: vership
- メディア: おもちゃ&ホビー
- この商品を含むブログを見る
しかもパッケージには220オームがあるって書いてあるけど手書きのメモで200オームとあるのが入ってたり、よくわからない。
カラーコードみても200に見えないんだが…
カラー抵抗早見表!
とりあえず気にしないことにしてこれを使う
これが組んだ回路。
前回のやつに抵抗を噛ませただけ。
比較
前回の構成(左)と、今回の構成(右)で動画をとって比較してみた。
やはり抵抗をかませるとちょっと暗くなっている事がわかる。
プログラムを確認する
現段階では、プログラムは前回のまま。光らせて、1秒まって、光らせるのやめて、1秒まって、を永遠に繰り返している。
int ledPin = 13; // 出力するピンを13番に指定
void setup()
{
pinMode(ledPin, OUTPUT);//うえで選んだピンを出力モードに指定
}
void loop()
{
digitalWrite(ledPin, HIGH); //LEDを光らせる
delay(1000); // 1秒待つ
digitalWrite(ledPin, LOW); //LEDを光らせるのをやめる
delay(1000); // 1秒待つ
}
すぐわかると思うが、 上記のloop()内をちょっと変えて、delay(1000)のところの1000を別な数字に変えれば、
光ったりやめたりのタイミングが変わる。
また、光らせるのとやめるのを1回ずつしか書いてないが、別に何回書いても良い。
これを応用すれば、モールス信号を示させるのは簡単だ。
モールス信号
モールス信号では短い音と長い音の組み合わせで文字を表す。
長点1つは短点3つ分の長さに相当し、各点の間は短点1つ分の間隔をあける。また、文字間隔は短点3つ分、語間隔は短点7つ分あけて区別する。
らしい。
実際の符号は
「イ」が・(短い) - (長い)、
「レ」が- (長い)- (長い)- (長い)
という感じだ。
ホントは音でやるもんなんだろうが、これをLEDのチカチカでやってみよう。
長いのと短いの
まず、これを表現した、「イ」=・-を表示する短いプログラムをつくる。
長点1つは短点3つ分の長さに相当し、各点の間は短点1つ分の間隔をあける。また、文字間隔は短点3つ分、語間隔は短点7つ分あけて区別する。
int ledPin = 13; //13番をアウトプットに指定
void setup()
{
pinMode(ledPin, OUTPUT);//13番をアウトプットに指定
}
void loop()
{
digitalWrite(ledPin, HIGH); // 光らせる
delay(1000); // ・1つは、1秒にする
digitalWrite(ledPin, LOW); //光らせるのやめる
delay(1000); // 各点の間は・ひとつ分なので、1秒まつ
digitalWrite(ledPin, HIGH); // 光らせる
delay(3000); // ーは・の3つ分なので、3秒まつ
digitalWrite(ledPin, LOW); //光らせるのやめる
delay(3000); // 文字の間は・の3つ分あけるので、3秒末
}
これでずっと「イ」を光らせる。
できた
好きな文字を出す。
次に、好きな文字のモールス信号が表示できるようにする。
先ほどのページの表を利用させてもらって、AとかZとか文字を指定するとそれをずっと光らせるというプログラムにした。
日本語はなんか動かなかったのでアルファベットのみ。
String mojiには、表示できる文字をいれてある。
String tonTuには、mojiに対応する順番で、ある文字を表す符号をいれてある。
符号はsが短点、lが長点を表す。
gist.github.com
(GISTに公開した)
実行結果はこんな感じ。
「B」のツートントントンがわかるだろうか。
シリアルモニタにも、長い、短いのパターンを出すようになっている。
入力に合わせた信号を出す
次に、キーボードからの入力を受け付けて、押したキーのモールス信号を出すようにしてみる。
本当はこの連載のもっと先でやるはずなのだろうが、フライングして出すと、Serial.available()とSerial.read()という2つの関数でキーボードからの入力を受け取れる。
先ほどのコードをちょっと修正したこのプログラムで、キーボードに英字(大文字)を入力するとそれに対応するモールス信号がでる。
LEDのモールス信号を当てる!
更に改造して、LEDで表示されたモールス信号をあてるクイズゲームみたいにしてみる。
ランダムなモールス信号を出し、それとキーボード入力が合っていたら、素早くチカチカ、まちがってたらもう一度同じ信号を出す。
モールス信号の勉強に使ってください。
今日はここまで。
次回はこちら
総合もくじ