31 Arduino モールス通信練習機 3 設定値記憶 [EEPROM]
この記事では、モールス練習器のトーン周波数を変更したらArduinoボードの電源を切っても記憶されるスケッチを作成します。
- 第1回 モールス通信練習機 基本スケッチ
- 第2回 モールス通信練習機 周波数変更
- 第3回 モールス通信練習機 設定値記憶
- 第4回 モールス通信練習機 On/Off時間測定
- 第5回 モールス通信練習機 完成
はEEPROMデータを読み書きするプログラムが追加されます。
電源ON直後に setup関数内でEEPROMデータを読み込み、 frequency変数にセットします。前回のスケッチに追加したパラメータ変更機能での変更結果は、変更後すぐEEPROMに保管します。
使用する部品は、圧電スピーカーと縦振れ電鍵で、以下のピンに接続しています。
- pin 2 -> 電鍵
- pin 8 -> 圧電スピーカー
スケッチの内容
スケッチの serup関数内でEEPROMのデータを読み込みます。
実際には ckEEPROMdata関数でEEPROM 1 番地のデータを読み込み、有効な値(1-3)であれば周波数に変換します。もし無効な値であればデフォルトとして'3'を使用して周波数を求めます。
シリアル通信で有効な周波数変更コードを受信すると、そのコードをEEPROM 1 番地に上書きします。
// KeyOsc_3 // EEPROM 7-9 #include <eeprom.h> int frequency; 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 = " Sellected"; 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(); // EEPROM 読み込み ckEEPROMdata(); // EEPROMデータ取得 } void loop() { if(!digitalRead(keyPin)){ // keyが押されたら digitalWrite(ledPin, HIGH); // LEDをオン tone(spkPin,frequency); // サイドトーン ON }else{ // keyが離れていれば digitalWrite(ledPin, LOW); // LEDをオフ noTone(spkPin); // サイドトーン OFF } if(Serial.available()){ // 受信してるなら int val = Serial.read(); // 一文字入力し setPara(val); // setPara関数へ if((val>='1')&(val<='3')){ // 有効データなら EEPROM.write(1, val); // EEPROMに上書き delay(5); // 書き込み時間の確保 } } } // 周波数データの有効性確認と周波数への変換 // 1番地;周波数コード('1','2','3') // 無効データは '3'に読み替える void ckEEPROMdata(){ int val = EEPROM.read(1); if((val<'1')|(val>'3'))val='3'; setPara(val); } // データを解釈し処理する 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': // 600Hz 周波数変更 ----------- frequency = 600; Serial.println(sFreq3 + sSel); break; } }
動作の確認
スケッチを Arduino に書き込みプログラムがスタートしたら、Arduino IDE のシリアルモニターを起動してください。シリアルモニター画面が開いたら以下の手順で操作します。
- 通信速度を 115200 に設定する。
- ArduinoボードのリセットSWを押す。
- 使用できるコマンドがシリアルモニターに表示される。
- シリアルモニター上部送信欄に「1」を入力しする。
- 送信ボタンを押す。
- 画面上に周波数変更の確認が表示される。
- 電顕を叩いて周波数が変更されたことを確認する。
- ArduinoボードのリセットSWを押す。(電源OFFしても良い)
- コマンドリストが再び表示され、その下に記憶されている周波数も表示される。
次回は、電鍵操作を客観的に見直せるように、電鍵のON時間、OFF時間を測定しシリアルモニターに表示するスケッチ記事を予定します。