Vamos codificar textos para sinais sonoros e visuais!
Criado por Samuel Morse em 1835, o código Morse surgiu para ser a linguagem utilizada na transmissão de mensagens através do telégrafo elétrico.
O sinal de socorro mais comum é o SOS, formado por três pontos, três traços e três pontos. Esse sinal é internacionalmente reconhecido.
...---...
A representação de cada caracter podemos ver na imagem abaixo.
A duração de um traço é equivalente ao triplo do tempo de um ponto. Cada ponto ou traço é seguido de um curto silêncio, igual à duração de um ponto. As letras de uma palavra são separadas por um espaço, igual a três pontos, e uma palavra é separada da outra por um espaço de sete pontos.
O projeto codifica o texto recebido através da comunicação serial em Código Morse, que pode ser visualizado através do led, dos sinais sonoros do buzzer e em sua leitura no texto enviado à serial.
Referências:
https://pt.wikipedia.org/wiki/C%C3%B3digo_Morse
https://www.infoescola.com/comunicacao/codigo-morse
https://www.hipercultura.com/codigo-morse
Segue o esquema elétrico e o código fonte:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 | /*--------------------------------------------------------- Programa : CÓDIGO MORSE Autor : Fellipe Couto [ http://www.efeitonerd.com.br ] Data : 27/11/2018 ---------------------------------------------------------*/ #define TIME_DEFAULT 150 //Tempo padrão para pontos e traços #define NUM_CHARACTERS 40 //Quantidade de caracteres codificados #define LED 2 //Porta de conexão do led #define BUZZER 3 //Porta de conexão do buzzer #define BUZZER_FREQUENCY 3300 //Frequencia do buzzer struct libMorse { char character; String signal; }; libMorse signs[NUM_CHARACTERS] = { {'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', "----."}, {'.', ".-.-.-"}, {',', "--..--"}, {'?', "..--.."}, {'!', "-.-.--"}, }; void setup() { //Configura as portas pinMode(LED, OUTPUT); pinMode(BUZZER, OUTPUT); //Inicia a comunicação serial Serial.begin(9600); //Exibe a mensagem inicial Serial.println("CODIGO MORSE"); Serial.println("www.efeitonerd.com.br\n"); Serial.println("Digite o texto para codificar em Codigo Morse:"); } void loop() { String parameter = ""; //Recebe a string da serial while (Serial.available() > 0) { parameter += String(char(Serial.read())); delay(25); } //Emite o código morse if (parameter.length() > 0) { parameter.toUpperCase(); Serial.print("\n\nTexto: " + parameter + "Codigo Morse: "); MorseCode(parameter); } } void MorseCode(String text) { text.toLowerCase(); text.trim(); //Caracter por caracter da string text for (int t = 0; t < text.length(); t++) { //Retorna o sinal do caracter String signalChar = " "; for (int i = 0 ; i < 36 ; i++) { if (signs[i].character == text.charAt(t)) { signalChar = signs[i].signal; } } //Emite o sinal do caracter for (int i = 0 ; i < signalChar.length() ; i++) { switch (signalChar.charAt(i)) { case '.': Dot(); break; case '-': Dash(); break; case ' ': Space(); break; } } EndLetter(); } } void Dot() { digitalWrite(LED, HIGH); tone(BUZZER, BUZZER_FREQUENCY, TIME_DEFAULT); delay(TIME_DEFAULT); digitalWrite(LED, LOW); delay(TIME_DEFAULT); //Serial Serial.print("."); } void Dash() { digitalWrite(LED, HIGH); tone(BUZZER, BUZZER_FREQUENCY, TIME_DEFAULT * 3); delay(TIME_DEFAULT * 3); digitalWrite(LED, LOW); delay(TIME_DEFAULT); //Serial Serial.print("-"); } void EndLetter() { delay(TIME_DEFAULT * 3); Serial.print(" "); } void Space() { delay(TIME_DEFAULT * 7); Serial.print("/"); } |
Nenhum comentário:
Postar um comentário