/*
LED Blink in a class with no delay
*/
//ref: https://www.arduino.cc/education/morse-code-project/
char* letters[] = {
".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", // A-I
".---", "-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.", // J-R
"...", "-", "..-", "...-", ".--", "-..-", "-.--", "--.." // S-Z
};
//For Numbers
char* numbers[] = {
"-----", ".----", "..---", "...--", "....-", ".....",
"-....", "--...", "---..", "----."
};
int dotDelay = 200;
char inputString[256];
void setup() {
Serial.begin(9600);
Serial.println("Hello Audrey\n");
}
void loop() {
bool gotString = getSerialInput();
if(gotString)
{
// we have the sentence now
Serial.println(inputString);
// loop over each character
for(int i = 0; i < strlen(inputString); i++)
{
char letter = inputString[i];
Serial.println(letters[letter - 'A']);
morseCharacter(letter);
}
}
}
bool getSerialInput()
{
if(Serial.available())
{
size_t size = Serial.readBytesUntil('\n', inputString, 255);
inputString[size] = 0;
return true;
}
else
{
return false;
}
}
void morseCharacter(char ch) {
char* seq = "";
int i = 0;
//ref: https://forum.arduino.cc/t/converting-char-to-upper-case/69221
//convert any lowercase letters to uppercase
if(ch >= 'a' && ch <= 'z') ch += 'A' - 'a';
if (ch >= 'A' && ch <= 'Z')
{
seq = letters[ch - 'A'];
}
else if (ch >= '0' && ch <= '9')
{
seq = numbers[ch - '0'];
}
else if (ch == ' ')
{
Serial.println("space between words");
delay(dotDelay * 7);
}
while (seq[i] != NULL)
{
digitalWrite(13, HIGH);
if (seq[i] == '.')
{
Serial.println("dot");
delay(dotDelay);
}
else
{
Serial.println("dash");
delay(dotDelay * 3);
}
digitalWrite(13, LOW);
Serial.println("space between parts");
delay(dotDelay);
i++;
}
Serial.println("space between letters");
delay(dotDelay * 3);
}