Baliza autonoma de CW

Baliza de CW usando arduino nano, salida por pin 13 de LED, cambiarlo según pin a utilizar. Codigo suministrado a manera ilustrativa. 

/*

Programa de baliza morse para CW....Uso libre, por favor cite la fuente. Andres LU3HO.

*/

int vel=15;               //ajustar velocidad en palabras por minuto

//constantes de duracion de puntos, rayas y espacios. No tocar a menos que se quiera cambiar el peso de la TX.

int p=1200/vel;                   //duracion punto en milisegundos

int r=3*p;                        //duracion raya

int e=p;                          //duracion espacio entre puntos y/o rayas

int el=3*p;                       //duracion espacio entre letras

int pa=7*p;                       //duracion espacio entre palabras

void setup() {

  pinMode(13, OUTPUT);                            //pin 13 de salida, led en la placa.

}

void letras(char letra){                          //definicion alfabeto morse clásico básico

  switch(letra){

    case 'a': pu();ra();ele();break;

    case 'b': ra();pu();pu();pu();ele();break;

    case 'c': ra();pu();ra();pu();ele();break;

    case 'd': ra();pu();pu();ele();break;

    case 'e': pu();ele();break;

    case 'f': pu();pu();ra();pu();ele();break;

    case 'g': ra();ra();pu();ele();break;

    case 'h': pu();pu();pu();pu();ele();break;

    case 'i': pu();pu();ele();break;

    case 'j': pu();ra();ra();ra();ele();break;

    case 'k': ra();pu;ra();ele();break;

    case 'l': pu();ra();pu();pu();ele();break;

    case 'm': ra();ra();ele();break;

    case 'n': ra();pu();ele();break;

    case 'o': ra();ra();ra();ele();break;

    case 'p': pu();ra();ra();pu();ele();break;

    case 'q': ra();ra();pu();ra();ele();break;

    case 'r': pu();ra();pu();ele();break;

    case 's': pu();pu();pu();ele();break;

    case 't': ra();ele();break;

    case 'u': pu();pu();ra();ele();break;

    case 'v': pu();pu();pu();ra();ele();break;

    case 'w': pu();ra();ra();ele();break;

    case 'x': ra();pu();pu();ra();ele();break;

    case 'y': ra();pu();ra();ra();ele();break;

    case 'z': ra();ra();pu();pu();ele();break;

    case '0': ra();ra();ra();ra();ra();ele();break;

    case '1': pu();ra();ra();ra();ra();ele();break;

    case '2': pu();pu();ra();ra();ra();ele();break;

    case '3': pu();pu();pu();ra();ra();ele();break;

    case '4': pu();pu();pu();pu();ra();ele();break;

    case '5': pu();pu();pu();pu();pu();ele();break;

    case '6': ra();pu();pu();pu();pu();ele();break;

    case '7': ra();ra();pu();pu();pu();ele();break;

    case '8': ra();ra();ra();pu();pu();ele();break;

    case '9': ra();ra();ra();ra();pu();ele();break;

    case '/': ra();pu();pu();ra();pu();ele();break;

    case '.': pu();ra();pu();ra();pu();ra();ele();break;

    case '=': ra();pu();pu();pu();ra();ele();break;

    case ',': ra();ra();pu();pu();ra();ra();ele();break;

    case '?': pu();pu();ra();ra();pu();pu();ele();break;

    case ' ': epa(); break;                                 //silencio entre palabras

    case '^': epa();epa();epa();break;                      //silencio largo

    }

  }

  

void pu(){                      //secuencia de punto

  digitalWrite(13, HIGH); 

  delay(p);

  digitalWrite(13, LOW);    

  delay(e);  

  }

void ra(){                      //secuencia de raya

  digitalWrite(13, HIGH); 

  delay(r);

  digitalWrite(13, LOW);    

  delay(e);  

  }

void ele(){                     //secuencia de espacio entre letras

  digitalWrite(13, LOW);    

  delay(el);  

  }  

void epa(){                     //secuencia de espacios entre palabras

  digitalWrite(13, LOW);    

  delay(pa);  

  }  

  

// the loop function runs over and over again forever

void loop() {

    

  letras('h');    //inicio mensaje

  letras('o');

  letras('l');

  letras('a');

  letras(' ');

  letras('a');

  letras('m');

  letras('i');

  letras('g');

  letras('o');

  letras(' ');

  letras(' ');    //fin mensaje

}