久々に使う Arduino Uno R3 の使い方を思い出してみる(後編)
という事で前回までに、ほぼ作業は完了していたコレ。 実際に、モールス符号の定義を確認、だいたいの書き方の確認まで終わっていた。あと五分から十分あったら完成ってところで時間切れ。
ほんと、学生の頃の自由な時間が欲しい。
完成したスケッチ
アイデアで書いたものをコピペして、 Arduino Uno に転送。 実際にLEDを光らせてみる。
/* Morse Blink */ int morseCode[26][4] = { // DOT=1 , DASH=2 , BLANK=0 {1,2,0,0}, {2,1,1,1}, {2,1,2,1}, {2,1,1,0}, {1,0,0,0}, // A,B,C,D,E {1,1,2,1}, {2,2,1,0}, {1,1,1,1}, {1,1,0,0}, {1,2,2,2}, // F,G,H,I,J {2,1,2,0}, {1,2,1,1}, {2,2,0,0}, {2,1,0,0}, {2,2,2,0}, // K,L,N,M,O {1,2,2,1}, {2,2,1,2}, {1,2,1,0}, {1,1,1,0}, {2,0,0,0}, // P,Q,R,S,T {1,1,2,0}, {1,1,1,2}, {1,2,2,0}, {2,1,1,2}, {2,1,2,2}, // U,V,W,X,Y {2,2,1,1} }; // Z void setup() { pinMode(LED_BUILTIN, OUTPUT); } void keying (String Text, int wpm) { int i, j; int KeyingSpeed = (60 / (50 * (double)wpm)) * 1000; for ( i=0; i<Text.length(); i++) { for ( j=0; j<4; j++) { switch (morseCode[(int)Text.charAt(i)-65][j]){ case 1: // DOT digitalWrite(LED_BUILTIN, HIGH); delay(KeyingSpeed); digitalWrite(LED_BUILTIN, LOW); delay(KeyingSpeed); break; case 2: // DASH digitalWrite(LED_BUILTIN, HIGH); delay(KeyingSpeed*3); digitalWrite(LED_BUILTIN, LOW); delay(KeyingSpeed); break; default: // BLANK break; } delay(KeyingSpeed*2); } delay(KeyingSpeed*4); } } // the loop function runs over and over again forever void loop() { keying("MUDAMUDA", 12); }
これでおおむね予定通りの完成。
まぁ、LEDで動作確認できたし。 と目の前を見ると、秋月で買った圧電スピーカー。 これ、12番とGNDにつないで、ついでだから音を鳴らしてみよう。 変更点と言えば、出力ピンの定義
void setup() { pinMode(LED_BUILTIN, OUTPUT); }
こんな感じでとりあえず追加。
int SPEAKER = 12; void setup() { pinMode(LED_BUILTIN, OUTPUT); pinMode(SPEAKER, OUTPUT); }
あとは
digitalWrite(LED_BUILTIN, HIGH); delay(KeyingSpeed);
こんな感じだった部分に出力を追加。
digitalWrite(LED_BUILTIN, HIGH); tone(SPEAKER, Tone, KeyingSpeed); delay(KeyingSpeed);
これで、コードを流してみる。 うん、Arduinoって簡単ですなぁ。 完成版はこんな感じ。
/* Morse Blink */ int morseCode[26][4] = { // DOT=1 , DASH=2 , BLANK=0 {1,2,0,0}, {2,1,1,1}, {2,1,2,1}, {2,1,1,0}, {1,0,0,0}, // A,B,C,D,E {1,1,2,1}, {2,2,1,0}, {1,1,1,1}, {1,1,0,0}, {1,2,2,2}, // F,G,H,I,J {2,1,2,0}, {1,2,1,1}, {2,2,0,0}, {2,1,0,0}, {2,2,2,0}, // K,L,N,M,O {1,2,2,1}, {2,2,1,2}, {1,2,1,0}, {1,1,1,0}, {2,0,0,0}, // P,Q,R,S,T {1,1,2,0}, {1,1,1,2}, {1,2,2,0}, {2,1,1,2}, {2,1,2,2}, // U,V,W,X,Y {2,2,1,1} }; // Z int SPEAKER = 12; void setup() { pinMode(LED_BUILTIN, OUTPUT); pinMode(SPEAKER, OUTPUT); } void keying (String Text, int wpm) { int i, j; int Tone = 400; int KeyingSpeed = (60 / (50 * (double)wpm)) * 1000; for ( i=0; i<Text.length(); i++) { for ( j=0; j<4; j++) { switch (morseCode[(int)Text.charAt(i)-65][j]){ case 1: // DOT digitalWrite(LED_BUILTIN, HIGH); tone(SPEAKER, Tone, KeyingSpeed); delay(KeyingSpeed); digitalWrite(LED_BUILTIN, LOW); delay(KeyingSpeed); break; case 2: // DASH digitalWrite(LED_BUILTIN, HIGH); tone(SPEAKER, Tone, KeyingSpeed*3); delay(KeyingSpeed*3); digitalWrite(LED_BUILTIN, LOW); delay(KeyingSpeed); break; default: // BLANK break; } delay(KeyingSpeed*2); } delay(KeyingSpeed*4); } } // the loop function runs over and over again forever void loop() { keying("PARIS", 12); }