このサイトはMacを使って Arduino Uno の動作や活用法を学びます。

30 Arduino モールス通信練習機 2 周波数変更 [シリアル受信]

この記事では、トーン周波数が変更できるモールス練習器を作成します。周波数変更の指示はUSB接続しているPCのシリアルモニターから行います。

第2回はシリアル受信に関わるプログラムが追加されます。前回のスケッチに setPara関数を追加記入してこの関数内でシリアル受信データを処理します。

 

使用する部品は、圧電スピーカーと縦振れ電鍵で、以下のピンに接続しています。

 

 

スケッチの内容

スケッチで複数回使用される文字列は 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 のシリアルモニターを起動してください。シリアルモニター画面が開いたら以下の手順で操作します。

  1. 通信速度を 115200 に設定する。
  2. ArduinoボードのリセットSWを押す。
  3. 使用できるコマンドがシリアルモニターに表示される。
  4. シリアルモニター上部送信欄に「1」を入力しする。
  5. 送信ボタンを押す。
  6. 画面上に周波数変更の確認が表示される。
  7. 電顕を叩いて周波数が変更されたことを確認する。

 

 

 


 

次回は、サイドトーン周波数を一度設定したら、リセットしても、Arduinoボードの電源を切っても設定した周波数が記録されているようEEPROMに保存する変更の記事を予定します。