DECODER
int LDR_Pin = A0; //analog pin 0
int led = 13;
int LDR_Maxvalue=800;
int dot_length=800;
int dash_length=2500;
int letter_pause=2400;
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
// 10k between GND and A0
// LDR between 5V and A0
void setup(){
Serial.begin(9600);
pinMode(led, OUTPUT);
lcd.begin(16,2);
}
int counter_high = 0;
int counter_low = 0;
void loop(){
int LDRReading = analogRead(LDR_Pin);
if (LDRReading >= LDR_Maxvalue){
counter_high++ ;
if ( counter_low > 0 ){
// Serial.print("Low\t");
// Serial.print(counter_low);
// Serial.print("\n");
}
if ( counter_low >= letter_pause) {
Serial.println();
lcd.setCursor(0, 0);
}
counter_low=0;
digitalWrite(led, HIGH);
}
else {
// Serial.print(".");
counter_low++;
if ( counter_high > 0 ){
// Serial.print("High\t");
// Serial.print(counter_high);
}
if ( (counter_high <= letter_pause ) &&( counter_high >=dot_length)){
// Serial.print(counter_high);
Serial.print(".");
lcd.print(".");
}
if ( counter_high > letter_pause ){
// Serial.print(counter_high);
Serial.print("-");
lcd.print("-");
}
counter_high=0;
digitalWrite(led, LOW);
}
}
CODER
const int ledPin = 13;
int unit = 250;
char* morseLet[]= {".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".---", "-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.", "...", "-", "..-", "...-", ".--", "-..-", "-.--", "--.."};
char* morseNum[]= {"-----", ".----", "..---", "...--", "....-", ".....", "-....", "--...", "---..", "----."};
void setup() {
pinMode(ledPin, OUTPUT);
delay(1000);
Serial.begin(9600);
}
void loop() {
char info;
if(Serial.available() >0) {
info = Serial.read();
if(info >= 'a' && info <= 'z'){
interp(morseLet[info - 'a']);
}
else if(info >= 'A' && info <= 'Z'){
interp(morseLet[info - 'A']);
}
else if(info >= '0' && info <= '9'){
interp(morseLet[info - 0]);
}
else if (info== ' '){
delay(unit*7);
}
}
}
void interp(char* character){
int i=0;
while (character[i] != '\0'){
output (character[i]);
i++;
}
delay (unit*3);
}
void output(char outp){
digitalWrite(ledPin, HIGH);
if(outp =='.') {
delay(unit);
}
else {
delay(unit*3);
}
digitalWrite(ledPin, LOW);
delay(unit);
}