No post de hoje, nós iremos aprender sobre o Código Morse e como ele funciona! O código Morse foi criado em 1835 pelo pintor, físico e inventor, Samuel Finley Breese Morse. Por volta do Século XIX o código era muito usado por marinheiros. Inclusive, o primeiro resgate marítimo registrado usando código Morse foi em 1889, no estreito de Dover.
Fonte: pt.wikipedia.org/wiki/Estreito_de_Dover
O código Morse é um sistema binário de números, letras e sinais gráficos. Como o nome já diz, um sistema binário funciona com dois tipos de “informações”. O código binário, por exemplo, utiliza apenas o 0 e o 1, já o código Morse utiliza pontos e traços.
Fonte: escoteirodesbravador.blogspot.com
Fonte: cursoenemgratuito.com.br
A transmissão do código Morse pode ser feita várias maneiras. Ele pode ser transmitido por pulsos elétricos, intervalos de sons ou até intervalos de luz (piscadas de luz). A primeira invenção a realmente usar o código Morse de forma efetiva para longas distâncias foi o telégrafo. Os operadores tinham que saber interpretar os cliques, para transferi-los em pontos e traços. Pouco tempo depois, foi notado que os operadores teriam mais facilidade em pegar os sinais se eles fossem escutados. Daí, o código Morse passou a ser mais usado por sons, (bips curtos para pontos e bips longos para traços).
E uma curiosidade: o teclado como nós conhecemos hoje em dia, na sua formatação mais conhecida “QWERTY”, surgiu por causa dos operadores de telégrafo, que tinham que passar o código recebido para texto. Porém, eles tinham que digitar muito rápido o que captavam e, com isso, surgiu o teclado QWERTY, em que as letras mais comuns do inglês ficam mais próximas. Hoje em dia, existem mais formatações de teclado, como, por exemplo: Dvorak, KALQ, MALTRON, JCUKEN, etc.
Teclado QWERTY
Teclado DVORAK
Fonte: Wikipedia
Teclado kalq
Fonte: Tecmundo
Aqui, o mais diferente da lista:
Teclado MALTRON
Vamos aprender na prática como o Código Morse funciona com o Arduino!
O código será o seguinte:
//Converte os caracteres em dados char char charecters[] = {'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', '!', '"', '$', '&', '(', ')', '_', '+', '=', '-', ':', ';', '@', '\'', ',', '.', '/', '?', ' '}; char* morse[] = {".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".---", "-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.", "...", "-", "..-", "...-", ".--", "-..-", "-.--", "--..", "-----", ".----", "..---", "...--", "....-", ".....", "-....", "--...", "---..", "----.", "-·-·--", "·-··-·", "···-··-", "·-···", "-·--·", "-·--·-", "··--·-", "·-·-·", "-···-", "-····-", "---···", "-·-·-·", "·--·-·", "·----·", "--··--", "·-·-·-", "-··-·", "··--··", " "}; int len = 55; //instancia em que pino o buzzer vai ficar int buzzerpin = 12 ; int dotLen = 150; // Você pode ajustar a velocidade dos bips aqui int dashLen = dotLen * 3; int elemGap = dotLen; int charGap = dotLen * 2; int Space = dotLen * 6; char charDelimiter = '@'; // Usa isso para separar os caracteres String inputString = ""; boolean stringComplete = false; void setup() { Serial.begin(9600); pinMode(buzzerpin, OUTPUT); inputString.reserve(200); } void loop() { serialEvent(); if (stringComplete) { Serial.println(inputString); //imprime no monitor seria a mensagem que você escreveu String code = toMorse(inputString); Display(code); inputString = ""; stringComplete = false; } } String toMorse(String inputString) { inputString.toLowerCase(); int inputString_len = inputString.length() + 1; char char_array[inputString_len]; inputString.toCharArray(char_array, inputString_len); String finalcode = ""; for (int i = 0; i < inputString_len; i++) { for (int n = 0; n < len; n++) { if (char_array[i] == charecters[n] ) { finalcode += morse[n]; finalcode += charDelimiter; } } } return finalcode; } String toString(String code) { return ""; } void Display(String code) { int code_len = code.length() + 1; char code_array[code_len]; code.toCharArray(code_array, code_len); for (int i = 0; i < code_len; i++) { if (code_array[i] == '.') { digitalWrite(buzzerpin, HIGH); delay(dotLen); digitalWrite(buzzerpin , LOW); delay(elemGap); Serial.print(code_array[i]); } else if (code_array[i] == '-') { digitalWrite(buzzerpin , HIGH); delay(dashLen); digitalWrite(buzzerpin, LOW); delay(elemGap); Serial.print(code_array[i]); } else if (code_array[i] == ' ') { delay(Space); Serial.print(" "); } else if (code_array[i] == charDelimiter) { delay(charGap); Serial.print(" "); } } Serial.println(); Serial.println("Pronto"); } void serialEvent() { while (Serial.available()) { char inChar = (char)Serial.read(); inputString += inChar; if (inChar == '\n') { stringComplete = true; } } }
Esse código foi adaptado do Instructables.
Link: https://www.instructables.com/Arduino-Text-to-Morse-code/
Como podemos ver no monitor serial , o código pegou a palavra e traduziu para o morse e ativou o buzzer de acordo se era um ponto ou um traço.
|
A Eletrogate é uma loja virtual de componentes eletrônicos do Brasil e possui diversos produtos relacionados à Arduino, Automação, Robótica e Eletrônica em geral.
Conheça a Metodologia Eletrogate e Lecione um Curso de Robótica nas Escolas da sua Região!