Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //lista de caracteres validos
- 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', '.', ',', '?', '"', '!'};
- //lista de caracteres convertidos a morse
- String codigo[] = {".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".---", "-.-", ".-..", "--", "-.", "--.--", "---", ".--.", "--.-", ".-.", "...", "-", "..--", "...-", ".--", "-..-", "-.--", "--..", "-----", ".----", "..--", "...--", "....-", ".....", "-....", "--...", "---..", "---..", "----.", ".-.-.-", "--..--", "..--..", ".-..-.", "-.-.--"};
- //varaible que contiene la frace error por si la palabra enviada esta mal
- //variable que contendra la cadena de caracteres traducida a morse
- //variable que contendra la palabra digitada por el usuario
- String error = "../../..", traduccion = "", palabra = "";
- //representa el espacio vacio entre palabras
- char vacio = '/';
- //pin del buzzer
- #define buzzer 3
- //pin del led que se enciende cunado se emite el sonido de raya
- #define ledRaya 7
- //pin del led que se enciende cunado se emite el sonido de punto
- #define ledPunto 8
- //pin del led que se enciende cunado hay un espacio entre palabras
- #define ledEspacio 9
- //pin del led que se enciende cunado se termina el mensaje
- #define ledFin 10
- //representa el tiempo de duracion del punto
- int tiempoPunto = 70;
- //representa el tiempo de duracion de la raya
- int tiempoRaya = tiempoPunto * 3;
- //representa el tiempo que hay entre letra y letra
- //representa el tiempo que hay entre palabra y palabra
- int silencioLetra = tiempoPunto * 3, silencioPalabra = tiempoPunto * 5;
- //para validar que ya se haya en viado el mensaje atravez del puerto serial
- boolean enviado = false;
- void setup(){
- //se configuran los pines
- pinMode(buzzer, OUTPUT);
- pinMode(ledRaya, OUTPUT);
- pinMode(ledPunto, OUTPUT);
- pinMode(ledEspacio, OUTPUT);
- pinMode(ledFin, OUTPUT);
- Serial.begin(9600);
- }
- void loop(){
- traducirPalabra();
- if(!enviado){
- Serial.print(traduccion);
- enviado = true;
- }
- emitirMorse();
- finMensaje();
- }
- //metodo que se encarga de dar a saber que ya se termino de transmitir el mensaje
- //esperando medio segundo para continuar
- void finMensaje(){
- digitalWrite(ledFin, HIGH);
- delay(500);
- digitalWrite(ledFin, LOW);
- }
- //metodo que se encarga de encender un led (raya o punto) y emitir un sonido
- //a travez del buzzer dejando un respectivo tiempo de diferencia
- void tono(int tiempoEmision, int pin, int frecuencia){
- //se toca el tono
- tone(buzzer, frecuencia);
- //se enciende el led
- digitalWrite(pin, HIGH);
- delay(tiempoEmision);
- //se apaga el led
- digitalWrite(pin, LOW);
- //se detiene el tono
- noTone(buzzer);
- }
- //funcion que se usa para emitir un punto
- void punto(){
- //se deja un espacio entre la anterior letra y esta
- delay(silencioLetra);
- tono(tiempoPunto, ledPunto, 1500);
- }
- //funcion que se usa para emitir un raya
- void linea(){
- //se deja un espacio entre la anterior letra y esta
- delay(silencioLetra);
- tono(tiempoRaya, ledRaya, 500);
- }
- //funcion que se usa para emitir el espacio entre palabras
- void espacio(){
- digitalWrite(ledEspacio, HIGH);
- delay(silencioPalabra);
- digitalWrite(ledEspacio, LOW);
- }
- //metodo que se encarga de convertir la palabra digitada a codigo morse
- void traducirPalabra(){
- palabra = "";
- if(Serial.available()){
- //se lee el contenido de Serial
- palabra = Serial.readString();
- //se borra la anterior palabra traducida
- traduccion = "";
- enviado = false;
- //se usa para validar el hecho de encontrar un caracter
- boolean encontre = false;
- //si se digita la palabra error
- if(palabra == "error")
- traduccion = error;
- else{
- //se lee la palabra digitada y se comvierte a morse
- for(int i = 0; i < palabra.length(); i++){
- for(int j = 0; j < sizeof(caracteres) && !encontre; j++){
- if(palabra.charAt(i) == caracteres[j]){
- encontre = true;
- traduccion += codigo[j] + " ";
- }
- else if(palabra.charAt(i) == ' '){
- encontre = true;
- traduccion += vacio;
- }
- }
- encontre = false;
- }
- }
- }
- }
- //metodo que se encarga de emitir la palabra traducida
- void emitirMorse(){
- for(int i = 0; i < traduccion.length(); i++){
- //se lee caracter por caracter de la palabra traducida a morse
- if(traduccion.charAt(i) == '.')
- punto();
- else if(traduccion.charAt(i) == '-')
- linea();
- else if(traduccion.charAt(i) == vacio)
- espacio();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement