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に保存する変更の記事を予定します。