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.
Tenha a Metodologia Eletrogate dentro da sua Escola! Conheça nosso Programa de Robótica nas Escolas!