Skip to content

Instantly share code, notes, and snippets.

@uozias
Created December 11, 2015 11:55
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save uozias/c9b0703cab11f6021327 to your computer and use it in GitHub Desktop.
Save uozias/c9b0703cab11f6021327 to your computer and use it in GitHub Desktop.
Morse signal prctice app for Arduino with LED
int ledPin = 13; //13番をアウトプットに指定
int interval = 500; // ・1つは、0.5秒にする
int long_interval = interval * 3; // ーは・の3つ分まつ
String moji[] = {String("A"), String("B"), String("C"), String("D"), String("E"), String("F"), String("G"), String("H"), String("J"), String("K"), String("L"), String("M"), String("N"), String("O"), String("P"), String("Q"), String("R"), String("S"), String("T"), String("U"), String("V"), String("W"), String("X"), String("Y"), String("Z"), String("I")};
String tonTu[] = {String("sl"), String("lsss"), String("lsls"), String("lss"), String("s"), String("ssls"), String("lls"), String("ssss"), String("slll"), String("lsl"), String("slss"), String("ll"), String("ls"), String("lll"), String("slls"), String("llsl"), String("sls"), String("sss"), String("l"), String("ssl"), String("sssl"), String("sll"), String("lssl"), String("lsll"), String("llss"), String("ss")};
int lengthMojiArray = sizeof(moji) / sizeof(moji[0]);
// 表示したい文字1つ
int ramdomNUm = random(0, lengthMojiArray);
String target = moji[ramdomNUm];
String inputted = String("");
int length = 0;
void setup()
{
Serial.begin(9600); // シリアルポートを9600bpsで開く
pinMode(ledPin, OUTPUT);//13番をアウトプットに指定
Serial.println(ramdomNUm);
Serial.println(target);
showCharacter(target);
}
void loop()
{
// 入力と設定値をつきあわせる
if(Serial.available()>0){
inputted = String(char(Serial.read()));
Serial.println(inputted);
if(inputted.equals(target)){
Serial.println("ok");
// 正解 チカチカ
digitalWrite(ledPin, HIGH); // 光らせる
delay(300);
digitalWrite(ledPin, LOW); //光らせるのやめる
delay(300);
digitalWrite(ledPin, HIGH); // 光らせる
delay(300);
digitalWrite(ledPin, LOW); //光らせるのやめる
delay(300);
digitalWrite(ledPin, HIGH); // 光らせる
delay(300);
digitalWrite(ledPin, LOW); //光らせるのやめる
delay(300);
delay(interval); // ・1つは、1秒にする
// 次の文字を決める
ramdomNUm = random(0, lengthMojiArray);
Serial.println(ramdomNUm);
target = moji[ramdomNUm];
Serial.println(target); // 一応決定した文字を出す
}else{
Serial.println("ng");
delay(long_interval); // 長く待つ
}
showCharacter(target); // 1回表示する
}
}
// 文字1つぶん光らせる
void showCharacter(String character)
{
// 光らせたい文字の番号を検索
int targetIndex = 0;
for (int i = 0; i < lengthMojiArray; i++){
if(character.equals(moji[i])){
targetIndex = i;
break;
}
}
// その番号の符号を検索
length = tonTu[targetIndex].length();
for(int j = 0; j < length; j++){
showSignal(String(tonTu[targetIndex].charAt(j))); // 光らせる
}
}
// 符号1つ分を光らせる
void showSignal(String character)
{
if(String("s").equals(character)) { // 短点
Serial.println("short!");
digitalWrite(ledPin, HIGH); // 光らせる
delay(interval); // ・1つは、1秒にする
}else if(String("l").equals(character)){ // 長点
Serial.println("long!");
digitalWrite(ledPin, HIGH); // 光らせる
delay(long_interval); // ーは・の3つ分なので、3秒まつ
}
digitalWrite(ledPin, LOW); //光らせるのやめる
delay(long_interval); // 文字の間は・の3つ分あけるの
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment