Hackster is hosting Hackster Holidays, Ep. 7: Livestream & Giveaway Drawing. Watch previous episodes or stream live on Friday!Stream Hackster Holidays, Ep. 7 on Friday!
Jalal Mansoori
Published © GPL3+

Morse Code Communication Using Arduino

Translation of Morse code to text.

BeginnerFull instructions provided47,873
Morse Code Communication Using Arduino

Things used in this project

Hardware components

Arduino UNO
Arduino UNO
×1
Pushbutton switch 12mm
SparkFun Pushbutton switch 12mm
I have used two pin push button
×2
LED (generic)
LED (generic)
×1
Buzzer
Buzzer
×1
Resistor 330 ohm
Resistor 330 ohm
×4
Breadboard (generic)
Breadboard (generic)
×1
Jumper wires (generic)
Jumper wires (generic)
Some wires for Connection from arduino board to breadboard
×10

Software apps and online services

Arduino IDE
Arduino IDE

Story

Read more

Schematics

Circuit Designing on Breadboard

Instructions for Digital Pins From Arduino to breadboard:
-> pin D2 is connected to one leg of pushButton1 .
-> pin D7 is connected to one leg of pushButton2.
-> pin D8 is connected to +ive terminal leg LED through resistor
-> And Finally pin D12 is connected to +ive terminal leg Buzzer through resistor

And other Connection Look at Schematic Picture and YOU ARE DONE !

Code

Morse Code Source CODE

C/C++
Now you ready to upload Sketch
Simply Open Your Arduino IDE and go to toolbar File->Open->MorseCode.io and click upload button
/*
  This Program is for demonstration of MORSE CODE Communication 
  which was use to send information secretly using codes of combinations dots .  and dashes - 
  Thanks to open source community

  By Jalal Mansoori
*/


#define SIZE 26
const int ledPin=8;
const int speakerPin=12;
const int dotButton=2;
const int dashButton=7;

String morseCode="";
String text="";
int characterAscii=0;
int startPos=0, endPos=0;
int startPos1=0, endPos1=0;
String characterCode="";
int dashButtonState=0;
int dotButtonState=0;


//Array of MorseCode for letters of English Language A to Z
String letters[SIZE]={

// A to I
".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..",
// J to R 
".---", "-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.",
// S to Z
"...", "-", "..-", "...-", ".--", "-..-", "-.--", "--.." 
};

        
void setup() {
  // put your setup code here, to run once:
//Getting things Ready
pinMode(ledPin, OUTPUT);
pinMode(dotButton, INPUT);
pinMode(dashButton, INPUT);
Serial.begin(9600);

Serial.println("*************************************************************");
Serial.println("                    Demonstration of Morse Code              ");
Serial.println("************************************************************* ");
Serial.println("\nInstructions");
Serial.println("1. First Write Your Morse code");
Serial.println("2. When you are done  Write 1 on above input box and Press Enter or click Send Button ");
Serial.println("3. For Space between letters write 2 and Press Enter ");
Serial.println("4. For Space between words   write 3 and Press Enter ");

Serial.println("5. Thats all Translation of Morse Code  will then be Shown ");

Serial.println("\n\nEnter Your Morse Code Here  ");

}


void loop() {
  // put your main code here, to run repeatedly:

while(Serial.available() > 0 ) 
{
      int ascii=Serial.read();

      switch(ascii)
      {
        case 49: // 49 is Ascii value of 1

        Serial.print("\n");
        morseCode.concat('#');// Placeing # at the end of morseCode to simplify further processing

         Serial.print("\nYour Morse code Translation :  ");
         
        endPos1=morseCode.indexOf('#');

        while(endPos1 < morseCode.length() )
        {
            extractLetters(morseCode.substring(startPos1, endPos1)); // This function would extract Letter as name suggest and would convert  code to text SIMPLE!
           startPos1=endPos1+1;
           if(startPos1 == morseCode.length() )
           {
              break; 
           }
           endPos1= morseCode.indexOf('#', startPos1);
        }
        startPos1=0;
        endPos1=0;

        text=""; //  For New Translation   
        morseCode="";
        Serial.println("\n\nEnter Your Morse Code Here ");
        
              
        break;

        case 50: // 50 is Ascii value of 2
        
        morseCode.concat("@");
        Serial.print("@");
        delay(200);
        
        break;

        case 51: // 51 is Ascii value of 3
          
        morseCode.concat("#");
        Serial.print("#");
        delay(200);
        
        break;
        
      }
      
}

process();

}

void turnONLedSpeaker()
{
  //Turn ON LED
  digitalWrite(ledPin, HIGH);
  tone(speakerPin, 4699, 300); // tone(speakerPin, frequency, duration in milliSec)
 
}

void process()
{
  
  dotButtonState=digitalRead(dotButton);
dashButtonState=digitalRead(dashButton);




  if(dashButtonState == HIGH)
  {
    turnONLedSpeaker();
   
    morseCode.concat("-"); // Storing code in variable morseCode with the help of concatenation function
    Serial.print("-");//Prints User entered Code
    delay(200);
  }
  else if(dotButtonState == HIGH)
  {
   turnONLedSpeaker();
  
   morseCode.concat(".");
   Serial.print(".");
   delay(200);
    
  }
  else
  {
    //Turn OFF LED
    digitalWrite(ledPin, LOW);
     
  }

}

char convertIntoText(String characterCode)
{
  characterAscii=65;
  
  for(int index=0; index<SIZE; index++)
  {
    if(characterCode == letters[index])
    {
      return characterAscii;   
    }
    characterAscii++;  
  }

}

void extractLetters(String words)
{
        words.concat('@'); // Placeing @ at the end of word to simplify further processing

        endPos=words.indexOf('@');

        
        //Loop to extracting single character morse Code from string of word        
        while( endPos<words.length() )
       {
         characterCode=words.substring(startPos, endPos);
         
         //Now CharacterCode will now convert in text

         text.concat(convertIntoText(characterCode));
         
         startPos=endPos+1;
         characterCode="";
         
          // if condition is just to terminate loop when our extracting single character code is complete thats all
         if(startPos == words.length() )
         {
           break;
         }
         
         endPos=words.indexOf('@', startPos);   
       
       }
                
        
        Serial.print(text);
        Serial.print(" ");
        startPos=0;
        endPos=0;
        text="";    
  
}

Credits

Jalal Mansoori
3 projects • 46 followers
BS Computer Science | Passionate blogger | Learn, Create, and Share

Comments