You write in your computer, sends a message thought USB and Arduino translates it into a Morse code.
Just a Arduino board with a buzzer connected at the digital output 12 (one wire in the ground and the other in the 12).
I tried to make the code as general as possible so you can easily adapt it for anthers ways of transmitting a Morse code. To do that you just need to rewrite a few functions.
+-------------------+ | 3) Interpretation | +-------------------+ | 2) Translation | +-------------------+ +-------------------+ | Computer |<========USB (Serial)=======>| 1) Reading | +-------------------+ +-------------------+
- Reads a character from Serial. Main function loop().
- Translate a ascii char into a Morse code using a reference table. A letter ‘K’ becomes a string word “-.-“. Function say_char().
- Interpret the Morse word as light and sound. Mostly at function say_morse_word(). The Interpretation needs 5 functions to say all Morse words, dot(), dash(), shortgap(), mediumgap() and intragap().
For a more details on Morse code I strongly recommend the English Wikipedia article on it.
int led = 13; // LED connected to digital pin 13
int buzzer = 12; // buzzer connected to digital pin 12
int unit = 50; // duration of a pulse
char * morsecode[] = {
"-----", // 0
".----", // 1
"..---", // 2
"...--", // 3
"....-", // 4
".....", // 5
"-....", // 6
"--...", // 7
"---..", // 8
"----.", // 9
"---...", // :
"-.-.-.", // ;
"", // < (there's no morse for this simbol)
"-...-", // =
"", // > (there's no morse for this simbol)
"..--..", // ?
".--._.", // @
".-", // A
"-...", // B
"-.-.", // C
"-..", // D
".", // E
"..-.", // F
"--.", // G
"....", // H
"..", // I
".---", // J
"-.-", // K
".-..", // L
"--", // M
"-.", // N
"---", // O
".--.", // P
"--.-", // Q
".-.", // R
"...", // S
"-", // T
"..-", // U
"...-", // V
".--", // W
"-..-", // X
"-.--", // Y
"--.." // Z
};
void setup() {
pinMode(led, OUTPUT);
pinMode(buzzer, OUTPUT);
Serial.begin(9600);
}
void say_morse_word(char * msg){
int index = 0;
while(msg[index]!='\0'){
// say a dash
if(msg[index]=='-'){
dash();
}
// say a dot
if(msg[index]=='.'){
dot();
}
// gap beetween simbols
intragap();
index++;
}
}
// beep
void beep(int time){
int i;
int t = 100; // period of the wav. bigger means lower pitch.
int beepduration = (int)((float)time/t*1800);
digitalWrite(led, HIGH);
for(i=0;i='0')&&(letter<='Z')&&(letter!='<')&&(letter!='>')){
Serial.print(morsecode[letter-'0']);
Serial.print(' ');
say_morse_word(morsecode[letter-'0']);
shortgap();
} else {
if(letter==' '){
Serial.print(" \\ ");
mediumgap();
}else{
Serial.print("X");
}
}
}
void loop(){
if(Serial.available()){
say_char((char)Serial.read());
}
}
Additionally you can put another function to say entire strings, like say_string(“HELLO WORLD”)
void say_string(char * asciimsg){
int index = 0;
char charac;
charac = asciimsg[index];
while(charac!='\0'){
say_char(morsecode[charac-'0']);
Serial.println(morsecode[charac-'0']);
charac = asciimsg[++index];
shortgap();
}
}
You can use the Arduino IDE itself or any other program that talks with the serial port USB.