Krishna Lalith
Published © LGPL

Morse Code with 18-Pin 16-Segment LED Display

Convert Morse Code to its Symbol Equivalent.

BeginnerShowcase (no instructions)3 hours517
Morse Code with 18-Pin 16-Segment LED Display

Things used in this project

Hardware components

Arduino Mega
×1
16 pin led
×1
Pushbutton switch 12mm
SparkFun Pushbutton switch 12mm
×3

Story

Read more

Schematics

16 Segment 18 Pin LED Display

Numbering of 16 Segment 18 Pin LED Display is shown in the image. Connections using Fritzing is NOT shown.

Code

MorseCode_LCD_16_Segment

Arduino
#include <Arduino.h>

int i = -1, j, port, N = -1, idx, AN = 0;
int rst, dot, das;
String code = "";

String Morse[36] = {
  {".----"}, //1
  {"..---"}, //2
  {"...--"}, //3
  {"....-"}, //4
  {"....."}, //5
  {"-...."}, //6
  {"--..."}, //7
  {"---.."}, //8
  {"----."}, //9
  {"----*"}, //0
  {".-***"}, //a
  {"-...*"}, //b
  {"-.-.*"}, //c
  {"-..**"}, //d
  {".****"}, //e
  {"..-.*"}, //f
  {"--.**"}, //g
  {"....*"}, //h
  {"..***"}, //i
  {".---*"}, //j
  {"-.-**"}, //k
  {".-..*"}, //l
  {"--***"}, //m
  {"-.***"}, //n
  {"---**"}, //o
  {".--.*"}, //p
  {"--.-*"}, //q
  {".-.**"}, //r
  {"...**"}, //s
  {"-****"}, //t
  {"..-**"}, //u
  {"...-*"}, //v
  {".--**"}, //w
  {"-..-*"}, //x
  {"-.--*"}, //y
  {"--..*"}, //z
};

boolean SEG16[36][18] = {
  {0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, //1
  {1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0}, //2
  {1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, //3
  {0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0}, //4
  {1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0}, //5
  {1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0}, //6
  {1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, //7
  {1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0}, //8
  {1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0}, //9
  {1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0}, //0
  {1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0}, //A
  {1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1}, //B
  {1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1}, //C
  {1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1}, //D
  {1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1}, //E
  {1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0}, //F
  {1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1}, //G
  {0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0}, //H
  {1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1}, //I
  {1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 1}, //J
  {0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0}, //K
  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1}, //L
  {0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0}, //M
  {0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0}, //N
  {1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1}, //O
  {1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0}, //P
  {1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1}, //Q
  {1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0}, //R
  {1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1}, //S
  {1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0}, //T
  {0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1}, //U
  {0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0}, //V
  {0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0}, //W
  {0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0}, //X
  {0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0}, //Y
  {1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1}, //Z
};

void setup() {
  Serial.begin(9600);

  pinMode(7, INPUT);
  pinMode(8, INPUT);
  pinMode(9, INPUT);

  for (j = 22; j < 40; j++) {
    pinMode(j, OUTPUT);
  }
}

void loop() {
  delay(1000);

  das = digitalRead(7);
  dot = digitalRead(8);
  rst = digitalRead(9);

  if (rst == 1 || N > 4) {
    for (i = 0; i < 36; i++) {
      idx = Morse[i].indexOf("*");
      //idx = code.length();
      if (code.compareTo(Morse[i].substring(0, idx)) == 0) {
        AN = i;
        Serial.println(AN);
        break;
      }
    }
    N = -1;
    code = "";
  }
  
  if (dot == 1) {
    N = N + 1;
    code = String(code + ".");
  }
  if (das == 1) {
    N = N + 1;
    code = String(code + "-");
  }

  Serial.print(code);
  Serial.print("\n");

  //  AN = (AN + 1) % 36;
    for (j = 0; j < 18; j++) {
      port = 22 + j;
      if (SEG16[AN][j] == 0) {
        digitalWrite(port, HIGH);
      }
      else {
        digitalWrite(port, LOW);
      }
    }
}

Credits

Krishna Lalith
11 projects • 2 followers

Comments