/*
*/
const int LED_PIN = 12;
const int dot= 200; // length of the morse code 'dot'
int dash = dot * 3; // length of the morse code 'dash'
int partpause = dot; // length of the pause between elements of a character
int characters = dot * 3; // length of the spaces between characters
int spaces = dot * 7; // length of the pause between words
void setup() {
//initialize the digital pin as an output
pinMode(LED_PIN, OUTPUT);
Serial.begin(9600);
Serial.println("Welcome!");
digitalWrite(LED_PIN, HIGH);
}
char inputString[256];
//morse dot code
void morseDot()
{
digitalWrite(LED_PIN, LOW);
delay(dot);
}
//morse dash code
void morseDash()
{
digitalWrite(LED_PIN, LOW);
delay(dash);
}
//pausing code
void morsePause(int units)
{
//delay between elements
if(units == 'elements')
{
digitalWrite(LED_PIN, HIGH);
delay(partpause);
}
//delay between letters
else if(units == 'letters')
{
digitalWrite(LED_PIN, HIGH);
delay(characters);
}
//delay between words (its spaces - characters since it already delayed between characters)
else if(units == 'space')
{
digitalWrite(LED_PIN, HIGH);
delay(spaces-characters);
}
}
// code to check if a string has been input and if so,
// get the data and put it in inputString
bool getSerialInput()
{
if (Serial.available())
{
size_t size = Serial.readBytesUntil('\n', inputString, 255);
inputString[size] = 0;
return true;
}
else
{
return false;
}
}
// given a character, blink the corresponding morse code
void morseCharacter(char ch)
{
// blink the morse code for ch
Serial.println(ch);
// Take the passed character and blink the morse code
if (ch == 'a') {
morseDot();
morsePause('elements');
morseDash();
morsePause('letters');
}
else if (ch == 'b') {
morseDash();
morsePause('elements');
morseDot();
morsePause('elements');
morseDot();
morsePause('elements');
morseDot();
morsePause('letters');
}
else if (ch == 'c') {
morseDash();
morsePause('elements');
morseDot();
morsePause('elements');
morseDash();
morsePause('elements');
morseDot();
morsePause('letters');
}
else if (ch == 'd') {
morseDash();
morsePause('elements');
morseDash();
morsePause('elements');
morseDot();
morsePause('letters');
}
else if (ch == 'e') {
morseDot();
morsePause('letters');
}
else if (ch == 'f') {
morseDot();
morsePause('elements');
morseDot();
morsePause('elements');
morseDash();
morsePause('elements');
morseDot();
morsePause('letters');
}
else if (ch == 'g') {
morseDash();
morsePause('elements');
morseDash();
morsePause('elements');
morseDot();
morsePause('letters');
}
else if (ch == 'h') {
morseDot();
morsePause('elements');
morseDot();
morsePause('elements');
morseDot();
morsePause('elements');
morseDot();
morsePause('letters');
}
else if (ch == 'i') {
morseDot();
morsePause('elements');
morseDot();
morsePause('letters');
}
else if (ch == 'j') {
morseDot();
morsePause('elements');
morseDash();
morsePause('elements');
morseDash();
morsePause('elements');
morseDash();
morsePause('letters');
}
else if (ch == 'k') {
morseDash();
morsePause('elements');
morseDot();
morsePause('elements');
morseDash();
morsePause('letters');
}
else if (ch == 'l') {
morseDot();
morsePause('elements');
morseDash();
morsePause('elements');
morseDot();
morsePause('elements');
morseDot();
morsePause('letters');
}
else if (ch == 'm') {
morseDash();
morsePause('elements');
morseDash();
morsePause('letters');
}
else if (ch == 'n') {
morseDash();
morsePause('elements');
morseDot();
morsePause('letters');
}
else if (ch == 'o') {
morseDash();
morsePause('elements');
morseDash();
morsePause('elements');
morseDash();
morsePause('letters');
}
else if (ch == 'p') {
morseDot();
morsePause('elements');
morseDash();
morsePause('elements');
morseDash();
morsePause('elements');
morseDot();
morsePause('letters');
}
else if (ch == 'q') {
morseDash();
morsePause('elements');
morseDash();
morsePause('elements');
morseDot();
morsePause('elements');
morseDash();
morsePause('letters');
}
else if (ch == 'r') {
morseDot();
morsePause('elements');
morseDash();
morsePause('elements');
morseDot();
morsePause('letters');
}
else if (ch == 's') {
morseDot();
morsePause('elements');
morseDot();
morsePause('elements');
morseDot();
morsePause('letters');
}
else if (ch == 't') {
morseDash();
morsePause('letters');
}
else if (ch == 'u') {
morseDot();
morsePause('elements');
morseDot();
morsePause('elements');
morseDash();
morsePause('letters');
}
else if (ch == 'v') {
morseDot();
morsePause('elements');
morseDot();
morsePause('elements');
morseDot();
morsePause('elements');
morseDash();
morsePause('letters');
}
else if (ch == 'w') {
morseDot();
morsePause('elements');
morseDash();
morsePause('elements');
morseDash();
morsePause('letters');
}
else if (ch == 'x') {
morseDash();
morsePause('elements');
morseDot();
morsePause('elements');
morseDot();
morsePause('elements');
morseDash();
morsePause('letters');
}
else if (ch == 'y') {
morseDash();
morsePause('elements');
morseDot();
morsePause('elements');
morseDash();
morsePause('elements');
morseDash();
morsePause('letters');
}
else if (ch == 'z') {
morseDash();
morsePause('elements');
morseDash();
morsePause('elements');
morseDot();
morsePause('elements');
morseDot();
morsePause('letters');
}
else if (ch == ' ') {
morsePause('space');
}
}
void loop()
{
// check to see if string has been input
bool gotString = getSerialInput();
// if it has, then print it out
if (gotString)
{
// print out string retrieved from serial input
Serial.print("string: "); Serial.println(inputString);
// iterate over each character of string
for (int i = 0; i < strlen(inputString); i++)
{
morseCharacter(inputString[i]);
}
}
}