/* CW Trainer Ver0.5 2016.1.22 JH7UBC Keiji Hata */ #define SP_PIN 2//圧電スピーカーを接続するピン #define freq 800//トーン(Hz) char moji[37] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; //各文字に対するモールスコード(短点0、長点1、ストップビット1 例 A=00000110=6) byte mcode[36] = {6,17,21,9,2,20,11,16,4,30,13,18,7,5,15,22,27,10,8,3,12,24,14,25,29,19,31,63,60,56,48,32,33,35,39,47}; int m = 0; //文字のコード int y = 0; //モールス符号送出時のビット0の値 int val = 0;//入力した値 int n; //文字数 int interval1; int interval2; void setup(){ Serial.begin(9600); randomSeed(analogRead(0)); Serial.println ("***** CW Trainer *****"); } void loop(){ Serial.println("");//改行 Serial.println("1:ABC..0..9 2:A-Z(RANDOM) 3:A-Z0-9(RANDOM)"); Serial.println("Input number (1-3)"); input();//入力待ち switch (val){ case 49://"1"の時の処理 for (int i=0; i<=35; i++){ Serial.print(moji[i]); Serial.print(" "); m = mcode[i]; morseTone(); delay(interval1); } break; case 50://"2"の時の処理 HRBT(); n=26; rndChar(); break; case 51://"3"の時の処理 HRBT(); n=36; rndChar(); break; } } void HRBT(){ // HR HR BTの送出 HR(); HR(); Serial.print("BT"); m=49; morseTone(); delay(interval2); Serial.println(""); } void HR(){ Serial.print("HR "); m=16; morseTone(); delay(interval1); m=10; morseTone(); delay(interval1); } void rndChar(){ //100文字をランダムに送出する int count=0;//カウンタクリア while (count < 100){ int x = random(n); Serial.print(moji[x]); Serial.print(" "); m = mcode[x]; morseTone(); delay(interval1); if (( (count+1) % 10) ==0){ //10文字ごとに改行する Serial.println("");//改行 } count++; } } void morseTone(){ //モールス符号を送出する int dottime = analogRead(1) / 5; int dashtime = dottime * 3; interval1 = dottime * 2; interval2 = dottime * 4; while (m != 1){ y = m & 1; if (y == 0){ tone(SP_PIN,freq,dottime); delay(interval1); }else{ tone(SP_PIN,freq,dashtime); delay(interval2); } m = m >> 1;//1bit 右にシフト } } void input(){ //1文字入力 while ( Serial.available() == 0 ){ //入力があるまで待つ } val = Serial.read(); }