Tuesday, March 9, 2010

MORSE CODE transmission from Arduino

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 digitalWrite(buzzer, HIGH);
delayMicroseconds(t);
digitalWrite(buzzer, LOW);
delayMicroseconds(t);
}
delay(time);
}

// silence
void silence(int time){
digitalWrite(led, LOW);
delay(time);
}

// general procedure for .
void dot() {
beep(unit);
}

// general procedure for -
void dash() {
beep(unit*3);
}

// gap between dots and dashes
void intragap() {
silence(unit);
}

// gap between letters
void shortgap() {
silence(3*unit);
}

// gap be tween words
void mediumgap() {
silence(7*unit);
}

void say_char(char letter){
if((letter>='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());
}
}

No comments:

Post a Comment