Los leds indican si se trata de raya, punto, espacio o final de frase, dependiendo de cual encienda.
El texto se escribe en el monitor serie y este es enviado a la placa Arduino. Con un buzzer es posible escuchar también la traducción a clave morse.
Partes
4 resistencias 220 ohms
4 leds
6 jumpers
1 buzzer
Fritzing
Código
//lista de caracteres
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', '.', ',', '?', '"', '!'};
// caracteres convertidos a morse
String codigo[] = {".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".---", "-.-", ".-..", "--", "-.", "--.--", "---", ".--.", "--.-", ".-.", "...", "-", "..--", "...-", ".--", "-..-", "-.--", "--..", "-----", ".----", "..--", "...--", "....-", ".....", "-....", "--...", "---..", "---..", "----.", ".-.-.-", "--..--", "..--..", ".-..-.", "-.-.--"};
//variable que contiene la frase error por si la palabra enviada esta mal
//variable que contendrá la cadena de caracteres traducida a morse
//variable que contendrá la palabra digitada por el usuario
String error = "../../..", traduccion = "", palabra = "";
//representa el espacio vacío 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 duración del punto
int tiempoPunto = 70;
//representa el tiempo de duración 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 enviado el mensaje a través 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();
}
//método 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);
}
//método que se encarga de encender un led (raya o punto) y emitir un sonido
//a través 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);
}
//función 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);
}
//función 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);
}
//función 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 código 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 carácter
boolean encontre = false;
//si se digita la palabra error
if(palabra == "error")
traduccion = error;
else{
//se lee la palabra digitada y se convierte 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;
}
}
}
}
//método 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();
}
}
Proyecto tomado de: BLOG DE LAFAUXESCOBAR
lo que esta abajo de la explicacion es el codigo de programacion?
ResponderEliminar