// // Morse code generator for Arduino Nano (Low cost Chineese variant, select "old bootloader") // (c) Jack Leijssen 6 december 2021 // #define LENGTH_DIT 80 // 100ms = 12wpm Arduino #define stripe 3*LENGTH_DIT #define dot LENGTH_DIT #define letter_pause 2*LENGTH_DIT #define word_pause 4*LENGTH_DIT const String myString = "v v v v v de PA1W/B beacon jo21rj 350mW "; const String CODE[128] = { // Non-printable "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", // Symbols "", "", "", "", "", "", "", "", "", "", "", "", "--..--", "-....-", ".-.-.-", "-..-.", // Digits and '=' and '?' "-----", ".----", "..---", "...--", "....-", ".....", "-....", "--...", "---..", "----.", "", "", "", "-...-", "", "..--..", // Uppercase letters ".--.-.",".-","-...", "-.-.", "-..", ".","..-.", "--.", "....","..",".---", "-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.", "...", "-", "..-","...-",".--", "-..-","-.--", "--..", "", "", "", "", "", // Lowercase letters "",".-","-...", "-.-.", "-..", ".", "..-.", "--.", "....","..",".---", "-.-",".-..", "--","-.","---", ".--.","--.-", ".-.", "...", "-","..-","...-",".--", "-..-","-.--", "--..", "", "", "", "", "", }; void setup() { // Enable internal LED pinMode(LED_BUILTIN, OUTPUT); // Enable serial monitor Serial.begin(9600); while (!Serial); Serial.println("Prog start"); delay(dot); digitalWrite(LED_BUILTIN, LOW); } void gen_stripe() { digitalWrite(LED_BUILTIN, HIGH); delay(stripe); digitalWrite(LED_BUILTIN, LOW); delay(dot); } void gen_dot(){ digitalWrite(LED_BUILTIN, HIGH); delay(dot); digitalWrite(LED_BUILTIN, LOW); delay(dot); } void letter_space(){ delay(letter_pause); } void word_space(){ delay(word_pause); } void loop() { word_space(); char Mletter; for (int i = 0; i < myString.length(); i++) { String out = ""; Mletter = myString[i]; Serial.print(Mletter); for (int i =0; i < CODE[Mletter].length() ; i++) { char Charbit = CODE[Mletter][i]; switch(Charbit){ case '-': gen_stripe(); break; case '.': gen_dot(); break; case ' ': word_space(); break; } } letter_space(); } delay(5*word_pause); // end of text string Serial.println(""); }