// Definindo os pinos para LED, botão e buzzer
const int ledPin = 4;
const int buttonPin = 3;
const int buzzerPin = 2;
// Definindo variáveis e constantes
const int dotDuration = 250; // Duração de um ponto em milissegundos
const int dashDuration = dotDuration * 3; // Duração de um traço (3 vezes a duração de um ponto)
const int interSymbolDelay = dotDuration; // Tempo entre símbolos (duração de um ponto)
const int interCharacterDelay = dotDuration * 3; // Tempo entre caracteres (3 vezes a duração de um ponto)
const int interWordDelay = dotDuration * 7; // Tempo entre palavras (7 vezes a duração de um ponto)
// Definindo o código Morse para cada letra e número
const char* morseCodes[] = {
".-", // 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
};
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(buttonPin, INPUT_PULLUP);
pinMode(buzzerPin, OUTPUT);
Serial.begin(9600);
}
void loop() {
if (digitalRead(buttonPin) == LOW) {
Serial.println("Digite uma palavra:");
while (digitalRead(buttonPin) == LOW) {
// Aguarda o botão ser solto para começar a digitar a palavra
}
while (Serial.available() == 0) {
// Aguarda a entrada de dados
}
String palavra = Serial.readStringUntil('\n');
enviarCodigoMorse(palavra);
}
}
void enviarCodigoMorse(String mensagem) {
mensagem.toUpperCase(); // Converte a mensagem para maiúsculas
for (int i = 0; i < mensagem.length(); i++) {
char c = mensagem.charAt(i);
if (c >= 'A' && c <= 'Z') {
int index = c - 'A';
const char* morseCode = morseCodes[index];
transmitirCodigoMorse(morseCode);
}
// Ignora caracteres que não estão definidos em Morse
if (c == ' ') {
delay(interWordDelay); // Espaço entre palavras
} else {
delay(interCharacterDelay); // Espaço entre caracteres
}
}
}
void transmitirCodigoMorse(const char* morseCode) {
for (int i = 0; morseCode[i] != '\0'; i++) {
char symbol = morseCode[i];
if (symbol == '.') {
Serial.print(".");
// Transmitir um ponto (LED ligado e som do buzzer)
digitalWrite(ledPin, HIGH);
tone(buzzerPin, 1000); // Frequência do som
delay(dotDuration);
digitalWrite(ledPin, LOW);
noTone(buzzerPin);
delay(interSymbolDelay);
} else if (symbol == '-') {
Serial.print("-");
// Transmitir um traço (LED ligado e som do buzzer)
digitalWrite(ledPin, HIGH);
tone(buzzerPin, 1000); // Frequência do som
delay(dashDuration);
digitalWrite(ledPin, LOW);
noTone(buzzerPin);
delay(interSymbolDelay);
}
}
}