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

26 Arduino モールス通信キーヤーを作成 1

この記事では、モールス通信をするときに使用するエレクトリック・キーヤーを作成します。キーヤーはすでにPICマイコンを使い以前の記事で作っていますから、その時のアルゴリズムを用いて Arduino のスケッチを作りました。

今回使用する部品は、圧電スピーカーとパドルキーだけで、以下のピンに接続しています。

プログラムの流れ

機能を実現するプログラムフローは、以前と変わりありませんが、もう一度確認しておきます。

 

 

 

 

スケッチの作成

モールス 符号の送信速度をサイドトーンの周波数は、スケッチ上部の変数で指定しています。希望の値に書き換えてください。次の記事でこれらをSWで切り替える機能を追加する予定です。

 

// Electoric keyer
// 2021-6-24

int keySpeed = 125;   // 短点の時間 ms
int frequency = 700;  // サイドトーン周波数

int KEY_DOT  = 2;     // パドルのDot接点は  pin 2
int KEY_DASH = 3;     // パドルのDash接点は pin 3
int PIN_SPK  = 9;     // 圧電スピーカーは pin 9
int PIN_LED1 = 13;    // LED は ボード内蔵使用
boolean flagDot  = 0; // Dotが押された
boolean flagDash = 0; // Dashが押された
unsigned long tUp;    // 完了時間

void setup() {
    pinMode(KEY_DOT,  INPUT_PULLUP);
    pinMode(KEY_DASH, INPUT_PULLUP);
    pinMode(PIN_LED1, OUTPUT);
}

void loop() {
  // 短点が押されてたなら、sendDot()を実行
  if(! digitalRead(KEY_DOT))  flagDot = 1;
  if(flagDot)sendDot();

  // 長点が押されたなら、sendDash()を実行
  if(! digitalRead(KEY_DASH)) flagDash = 1;
  if(flagDash)sendDash();
}

// dot信号を送る
void sendDot(){
    flagDot = 0;                // 端点フラグをクリア
    digitalWrite(PIN_LED1, 1);  // LED ON
    tone(PIN_SPK,frequency);    // サイドトーン ON
    tUp = millis() + keySpeed;  // Mark終了時間セット

    while(tUp > millis()){      // Mark終了時間まで待つ
      // 長点が押されたなら、長点フラグをセット
      if(! digitalRead(KEY_DASH)) flagDash = 1;
    }
    digitalWrite(PIN_LED1, 0);  // LED OFF
    noTone(PIN_SPK);            // サイドトーン OFF
    tUp = millis() + keySpeed;  // コード終了時間セット

    while(tUp > millis()){      // コード終了を待つ
      // 長点が押されたなら、長点フラグをセット
      if(! digitalRead(KEY_DASH)) flagDash = 1;
    }
}

// Dash信号を送る
void sendDash(){
    flagDash = 0;
    digitalWrite(PIN_LED1, 1);
    tone(PIN_SPK,frequency);
    tUp = millis() + (keySpeed * 3);

    while(tUp > millis()){
      if(! digitalRead(KEY_DOT)) flagDot = 1;
    }
    digitalWrite(PIN_LED1, 0);
    noTone(PIN_SPK);
    tUp = millis() + keySpeed;

    while(tUp > millis()){
      if(! digitalRead(KEY_DOT)) flagDot = 1;
    }
}

 

動作の確認

スケッチを Arduino に書き込みプログラムがスタートしたら、接続したパドルを叩いて下ださい。ボード上の「L」LEDが点灯し、LEDに同期してサイドトーンが圧電スピーカーから聞こえます。

 


 

次回は、使いやすくするために、EEPROMを使い送信速度とサイドトーン周波数を設定記録する方法の記事を予定します。