#include <LiquidCrystal_I2C.h>
#define PR_PIN 2
const int punkt = 9; //ms
const int strich = punkt * 3;
const char alphabetArr[36] = {'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', '1', '2', '3', '4',
'5', '6', '7', '8', '9', '0'};
const String morseCodeArr[36] = {".-", "-...", "-.-.", "-..", ".",
"..-.", "--.", "....", "..", ".---",
"-.-", ".-..", "--", "-.", "---",
".--.", "--.-", ".-.", "...", "-",
"..-", "...-", ".--", "-..-", "-.--",
"--..", ".----", "..---", "...--", "....-",
".....", "-....", "--...", "---..", "----.", "-----"};
LiquidCrystal_I2C lcd(0x27, 20, 4);
int lichtAnZaehler = 0;
int lichtAusZaehler = 0;
String morseCode = "";
void setup() {
Serial.begin(9600);
pinMode(PR_PIN, INPUT_PULLUP);
lcd.init();
lcd.backlight();
}
char morseZuBuchstabe(String s)
{
char ruckgabe = "";
for (int i = 0; i < sizeof morseCodeArr; i++)
{
if (morseCodeArr[i] == s){
Serial.print(alphabetArr[i]);
ruckgabe = alphabetArr[i];
return ruckgabe;
}
}
}
void loop() {
int lichtAn = !digitalRead(PR_PIN);
if (lichtAn > 0)
{
lichtAnZaehler++;
lichtAusZaehler = 0;
}else{
lichtAusZaehler++;
if ((lichtAnZaehler >= punkt) && (lichtAnZaehler < strich)) {
morseCode += ".";
Serial.print(".");
lcd.clear();
lcd.setCursor(10, 0);
lcd.print("Punkt");
} else if (lichtAnZaehler >= strich) {
morseCode += "-";
Serial.print("-");
lcd.clear();
lcd.setCursor(10, 0);
lcd.print("Strich");
} else {
if(lichtAusZaehler == strich*5 || morseCode.length() == 5){
if (morseCode.length() > 0){
lcd.setCursor(10, 1);
lcd.print(morseCode);
lcd.print(morseZuBuchstabe(morseCode));
}
morseCode = "";
}
}
lichtAnZaehler = 0;
}
//LCD Ausgabe
lcd.setCursor(0, 0);
lcd.print(lichtAn);
lcd.setCursor(0, 1);
lcd.print(lichtAnZaehler);
}