Advertisement
Guest User

morse

a guest
Nov 26th, 2015
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.92 KB | None | 0 0
  1. //lista de caracteres validos
  2. char caracteres[] = {'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','0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '.', ',', '?', '"', '!'};
  3. //lista de caracteres convertidos a morse
  4. String codigo[] = {".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".---", "-.-", ".-..", "--", "-.", "--.--", "---", ".--.", "--.-", ".-.", "...", "-", "..--", "...-", ".--", "-..-", "-.--", "--..", "-----", ".----", "..--", "...--", "....-", ".....", "-....", "--...", "---..", "---..", "----.", ".-.-.-", "--..--", "..--..", ".-..-.", "-.-.--"};
  5. //varaible que contiene la frace error por si la palabra enviada esta mal
  6. //variable que contendra la cadena de caracteres traducida a morse
  7. //variable que contendra la palabra digitada por el usuario
  8. String error = "../../..", traduccion = "", palabra = "";
  9. //representa el espacio vacio entre palabras
  10. char vacio = '/';
  11.  
  12. //pin del buzzer
  13. #define buzzer 3
  14. //pin del led que se enciende cunado se emite el sonido de raya
  15. #define ledRaya 7
  16. //pin del led que se enciende cunado se emite el sonido de punto
  17. #define ledPunto 8
  18. //pin del led que se enciende cunado hay un espacio entre palabras
  19. #define ledEspacio 9
  20. //pin del led que se enciende cunado se termina el mensaje
  21. #define ledFin 10
  22.  
  23. //representa el tiempo de duracion del punto
  24. int tiempoPunto = 70;
  25. //representa el tiempo de duracion de la raya
  26. int tiempoRaya = tiempoPunto * 3;
  27. //representa el tiempo que hay entre letra y letra
  28. //representa el tiempo que hay entre palabra y palabra
  29. int silencioLetra = tiempoPunto * 3, silencioPalabra = tiempoPunto * 5;
  30. //para validar que ya se haya en viado el mensaje atravez del puerto serial
  31. boolean enviado = false;
  32.  
  33. void setup(){
  34.   //se configuran los pines
  35.     pinMode(buzzer, OUTPUT);
  36.     pinMode(ledRaya, OUTPUT);
  37.     pinMode(ledPunto, OUTPUT);
  38.     pinMode(ledEspacio, OUTPUT);
  39.     pinMode(ledFin, OUTPUT);
  40.     Serial.begin(9600);
  41. }
  42.  
  43. void loop(){
  44.     traducirPalabra();
  45.     if(!enviado){
  46.       Serial.print(traduccion);
  47.       enviado = true;
  48.     }
  49.    
  50.     emitirMorse();
  51.     finMensaje();
  52. }
  53. //metodo que se encarga de dar a saber que ya se termino de transmitir el mensaje
  54. //esperando medio segundo para continuar
  55. void finMensaje(){
  56.   digitalWrite(ledFin, HIGH);
  57.   delay(500);
  58.   digitalWrite(ledFin, LOW);
  59.  
  60. }
  61.  
  62. //metodo que se encarga de encender un led (raya o punto) y emitir un sonido
  63. //a travez del buzzer dejando un respectivo tiempo de diferencia
  64. void tono(int tiempoEmision, int pin, int frecuencia){
  65.   //se toca el tono
  66.     tone(buzzer, frecuencia);
  67.     //se enciende el led
  68.     digitalWrite(pin, HIGH);
  69.     delay(tiempoEmision);
  70.     //se apaga el led
  71.     digitalWrite(pin, LOW);
  72.     //se detiene el tono
  73.     noTone(buzzer);
  74.    
  75. }
  76.  
  77. //funcion que se usa para emitir un punto
  78. void punto(){
  79.   //se deja un espacio entre la anterior letra y esta
  80.     delay(silencioLetra);
  81.     tono(tiempoPunto, ledPunto, 1500);
  82. }
  83.  
  84. //funcion que se usa para emitir un raya
  85. void linea(){
  86.     //se deja un espacio entre la anterior letra y esta
  87.     delay(silencioLetra);
  88.     tono(tiempoRaya, ledRaya, 500);
  89. }
  90.  
  91. //funcion que se usa para emitir el espacio entre palabras
  92. void espacio(){
  93.     digitalWrite(ledEspacio, HIGH);
  94.     delay(silencioPalabra);
  95.     digitalWrite(ledEspacio, LOW);
  96. }
  97.  
  98. //metodo que se encarga de convertir la palabra digitada a codigo morse
  99. void traducirPalabra(){
  100.     palabra = "";
  101.     if(Serial.available()){
  102.       //se lee el contenido de Serial
  103.         palabra = Serial.readString();
  104.         //se borra la anterior palabra traducida
  105.         traduccion = "";
  106.         enviado = false;
  107.         //se usa para validar el hecho de encontrar un caracter
  108.         boolean encontre = false;
  109.         //si se digita la palabra error
  110.         if(palabra == "error")
  111.             traduccion = error;
  112.         else{
  113.           //se lee la palabra digitada y se comvierte a morse
  114.             for(int i = 0; i < palabra.length(); i++){
  115.                 for(int j = 0; j < sizeof(caracteres) && !encontre; j++){
  116.                     if(palabra.charAt(i) == caracteres[j]){
  117.                       encontre = true;
  118.                       traduccion += codigo[j] + " ";
  119.                     }
  120.                     else if(palabra.charAt(i) == ' '){
  121.                       encontre = true;
  122.                       traduccion += vacio;
  123.                     }
  124.                        
  125.                 }
  126.                 encontre = false;
  127.             }
  128.         }
  129.     }
  130. }
  131. //metodo que se encarga de emitir la palabra traducida
  132. void emitirMorse(){
  133.     for(int i = 0; i < traduccion.length(); i++){
  134.       //se lee caracter por caracter de la palabra traducida a morse
  135.       if(traduccion.charAt(i) == '.')
  136.         punto();
  137.       else if(traduccion.charAt(i) == '-')
  138.         linea();
  139.       else if(traduccion.charAt(i) == vacio)
  140.         espacio();
  141.     }
  142. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement