int myInCounter; int myPlayCounter; int myPlayCharIndex; char myPlayChar; char myMorseChar; String getInputString; String getMorseString = ""; int shortCharDelay = 55; // this is the length of the dot - it governs all timing int soundPin = 11; int ledPin = 2; String myLetterArray = "abcdefghijklmnopqrstuvwxyz0123456789"; //array to find character index number String myMorseArray[] = {"SL","LSSS","SLSL","LSS","S","SSLS","LLS","SSSS","SS","SLLL","LSL","SLSS","LL","LS","LLL","SLLS","LLSL","SLS","SSS","L","SL","SSL","SLL","LSSL","LSLL","LLSS","LLLLLL","SLLLL","SSLLL","SSSLL","SSSSL","SSSSS","LSSSS","LLSSS","LLLSS","LLLLS"}; //array to find corresponding morse code void setup() { Serial.begin(9600); // turn on Serial Port pinMode(soundPin, OUTPUT); // set soundPin as output pinMode(LED_BUILTIN, OUTPUT); // set LED_BUILTIN as output pinMode(ledPin, OUTPUT); // set ledPin (eyes) as output for (myInCounter = 1; myInCounter < 4; myInCounter++) { // short beeps to show start tone(soundPin, 500, shortCharDelay); digitalWrite(LED_BUILTIN, HIGH); //turn internal LED on digitalWrite(ledPin, HIGH); //turn LEDS on delay(2 * shortCharDelay); digitalWrite(LED_BUILTIN, LOW); //turn internal LED off digitalWrite(ledPin, LOW); //turn eye LEDs off } } void loop() { Serial.println("Enter your morse string: "); //Prompt User for input while (Serial.available() == 0) { //Wait for user input } getInputString = Serial.readString(); //Read user input into getInputString getInputString.toLowerCase(); //force input string into lower case Serial.println(getInputString); // print it for documentation for (myInCounter = 0; myInCounter <= getInputString.length() - 1; myInCounter++) { //enter loop for length of input string myPlayChar = getInputString.charAt(myInCounter); //get the character to analyse if (isSpace(myPlayChar)) { //if it is a space Serial.print("space - "); getMorseString = "PPP"; } else if (isAlpha(myPlayChar)) { //if it is a letter character myPlayCharIndex = myLetterArray.indexOf(myPlayChar); Serial.print(myPlayChar); // print it for documentation Serial.print(" - "); getMorseString = myMorseArray[myPlayCharIndex]; } else if (isDigit(myPlayChar)) {//if it is a number myPlayCharIndex = myLetterArray.indexOf(myPlayChar); Serial.print(myPlayChar); // print it for documentation Serial.print(" - "); getMorseString = myMorseArray[myPlayCharIndex]; } for (myPlayCounter = 0; myPlayCounter <= getMorseString.length() - 1; myPlayCounter++) { //morse play loop myMorseChar = getMorseString.charAt(myPlayCounter); //get the correct morse sequence Serial.print(myMorseChar); // print it for documentation switch (myMorseChar) { case 'S': tone(soundPin, 500, shortCharDelay); //play a tone of 500Hz for dot length time digitalWrite(LED_BUILTIN, HIGH); //turn internal LED on digitalWrite(ledPin, HIGH); //turn eye LEDs on delay(2 * shortCharDelay); digitalWrite(LED_BUILTIN, LOW); //turn internal LED off digitalWrite(ledPin, LOW); //turn eye LEDs off break; case 'L': tone(soundPin, 500, 3 * shortCharDelay); //play a tone of 500Hz for dot length time digitalWrite(LED_BUILTIN, HIGH); //turn internal LED on digitalWrite(ledPin, HIGH); //turn eye LEDs on delay(4 * shortCharDelay); digitalWrite(LED_BUILTIN, LOW); //turn internal LED off digitalWrite(ledPin, LOW); //turn eye LEDs off break; case 'P': delay(shortCharDelay); //just stay silent for a dot lenght of time break; } delay(shortCharDelay); } delay(5 * shortCharDelay); Serial.println(); } }