30 Arduino モールス通信練習機 2 周波数変更 [シリアル受信]
この記事では、トーン周波数が変更できるモールス練習器を作成します。周波数変更の指示はUSB接続しているPCのシリアルモニターから行います。
- 第1回 モールス通信練習機 基本スケッチ
- 第2回 モールス通信練習機 周波数変更
- 第3回 モールス通信練習機 設定値記憶
- 第4回 モールス通信練習機 On/Off時間測定
- 第5回 モールス通信練習機 完成
第2回はシリアル受信に関わるプログラムが追加されます。前回のスケッチに setPara関数を追加記入してこの関数内でシリアル受信データを処理します。
使用する部品は、圧電スピーカーと縦振れ電鍵で、以下のピンに接続しています。
- pin 2 -> 電鍵
- pin 8 -> 圧電スピーカー
スケッチの内容
スケッチで複数回使用される文字列は String定数として初めに定義しておきます。setPara関数を追加してシリアル受信データを処理します。setPara関数では、受信データを確認し、指示の周波数を frequency変数に代入するだけなので’理解しやすいと思います。
// KeyOsc_2
// Freq sellect OK 7-9
int frequency = 600;
int keyPin = 2; // 電顕は pin 2
int spkPin = 8; // 圧電スピーカーは pin 8
int ledPin = 13; // 内蔵LEDは pin 13
String sFreq1 = "1 -> Frequency 1000 Hz";
String sFreq2 = "2 -> Frequency 800 Hz";
String sFreq3 = "3 -> Frequency 600 Hz";
String sSel = " Selected";
void setup() {
Serial.begin(115200); // シリアル通信の設定
pinMode(keyPin, INPUT_PULLUP); // 出力に設定
pinMode(ledPin, OUTPUT); // 出力に設定
// コマンド説明
Serial.println("++++++++++++++++++++++");
Serial.println("Select Tone Frequency.");
Serial.println(sFreq1);
Serial.println(sFreq2);
Serial.println(sFreq3);
Serial.println();
}
void loop() {
if(!digitalRead(keyPin)){ // keyが押されたら
digitalWrite(ledPin, HIGH); // LEDをオン
tone(spkPin,frequency); // サイドトーン ON
}else{ // keyが離れていれば
digitalWrite(ledPin, LOW); // LEDをオフ
noTone(spkPin); // サイドトーン OFF
}
// シリアル受信してるなら、一文字入力しsetPara関数へ
if(Serial.available()){
setPara(Serial.read());
}
}
// データを解釈し処理する
void setPara(int val){
switch(val){
case '1': // 1000Hz 周波数変更 -----------
frequency = 1000;
Serial.println(sFreq1 + sSel);
break;
case '2': // 800Hz 周波数変更 -----------
frequency = 800;
Serial.println(sFreq2 + sSel);
break;
case '3': // 667Hz 周波数変更 -----------
frequency = 600;
Serial.println(sFreq3 + sSel);
break;
}
}
動作の確認
スケッチを Arduino に書き込みプログラムがスタートしたら、Arduino IDE のシリアルモニターを起動してください。シリアルモニター画面が開いたら以下の手順で操作します。
- 通信速度を 115200 に設定する。
- ArduinoボードのリセットSWを押す。
- 使用できるコマンドがシリアルモニターに表示される。
- シリアルモニター上部送信欄に「1」を入力しする。
- 送信ボタンを押す。
- 画面上に周波数変更の確認が表示される。
- 電顕を叩いて周波数が変更されたことを確認する。
次回は、サイドトーン周波数を一度設定したら、リセットしても、Arduinoボードの電源を切っても設定した周波数が記録されているようEEPROMに保存する変更の記事を予定します。