久々に使う 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);
}

コメント