PROJECT: Morse Code Creator
Step 1 - Build the Project

To create Morse code in blinks, you first need to convert plain characters to ASCII code, then to Morse code, then Morse code to digitalWrite commands.

Step 2 - Upload the Code

/* * Morse Code - LED 13 blinks text messages as Morse code dots and dashes */ // Change the "SOS" to any message you like... const char message[ ] = "SOS"; // create constant array of the messages you want Morse'd out // In ASCII code, 'space' is 32, '0'-'9' is 48-57, and 'A'-'Z' is 65-90 const String morse[] = { ".----", "..---", "...--", "....-", ".....", "-....", "--...", "---..", "----.", "-----", ".-", "-...", "-.-.", "-..", ".","..-.","--.", "....", "..", ".---", "-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.", "...", "-", "..-", "...-", ".--", "-..-", "-.--", "--.."}; const byte led = 13; // LED const int dotLen = 200; //delay in milliseconds const int dashLen = 3*dotLen; // 3X longer than the dot const int wordLen = 7*dotLen; // space between words. void setup() { pinMode(led, OUTPUT); } // blink out one morse code character. void signalMorse(String c) { int i = 0; while (c[i]) { // for each dot or dash in the letter... digitalWrite(led, HIGH); // light on if (c[i] == '.') { delay(dotLen); // if dot, short delay } else if (c[i] == '-') { delay(dashLen); // if dash, longer delay } digitalWrite(led, LOW); // and light off again delay(dotLen); // off blink. i++; //bring in the next dot or dash from the morse letter!]' }; //One dot length delay happened in the loop. A Word break is a dashLen... delay(dashLen-dotLen); } void loop() { int i = 0; //counter variable to move through the array char C; //holds each letter as it gets converted to blinks while (message[i]) { //fails when reaches the null term (0) of the string C = toupper(message[i]); if (C == ' ') { delay(wordLen); // space between words } else if (C>47 && C<58) { // 0-9. ASCII 48-57 signalMorse(morse[C-48]); } else if (C>64 && C<91) { // A-Z, ASCII 65-90, 10-34 in morse[] signalMorse(morse[C-55]); } else { delay(wordLen); } i++; // move to the next character in your message } delay(2 * wordLen); } // You can speed up or slow down dotLength to change the pace of the code // (c) 2017 Let's Start Coding. License: www.letsstartcoding.com/bsdlicense
 

Step 3 - Read the Walkthrough

First, you’ll create a list of values. This is called an array. The message array holds the plain text characters you’d like to convert to Morse code. The rest of the code can access these letters with a command like: “Go get the 10th thing in the array” and the code will fetch the 10th item in the array.

Second, you will  create another array. This array- named morse- holds the dot/dash code for each number and letter of the alphabet.

Next, create your variables. Your variables hold the values for which LED to blink and the time length of Morse dots, dashes, and spaces.

The next chunk of code is a function. It is a group of code that always runs together. It’s like a variable in that you create it, name it, and give it a value. The value of a function is usually a series of tasks to do in order. This particular function is designed to take dots and dashes and convert them to digitalWrite commands. It checks the Morse character and uses your dotLen and dashLen variables to determine how long to blink the light.

In this code, the loop() section is taking the text characters from the message array, making them uppercase, and converting the ASCII number to the corresponding Morse number. You don’t have to convert all of your plain text to ASCII- the computer is doing that automatically.

Next, it passes the Morse array number to signalMorse and says “Here, take this number and do your job with it." The i++ at the bottom of the loop then moves the loop on to the next character in the array.

The signalMorse number receives the Morse array number, which contains the characters made up of dashes and dots. Its job is to unpack the Morse array into single dashes and dots and then blink those dashes and dots. When it is done blinking, signalMorse receives another Morse array number from the loop and repeats.

These functions are interacting with each other, passing values and characters along the chain as they are converted from one character type to another.