//Morsecodes in aufsteigender Reihenfolge der ASCII-Werte //Dadurch kann durch (ASCII-Wert eines Zeichens) - (0x30) der Index im Array berechnet werden char morseCodeArray [50][6] = { {'-','-','-','-','-','x'}, //0 -> 0x30 -> Index 0 {'.','-','-','-','-','x'}, //1 -> 0x31 -> Index 1 {'.','.','-','-','-','x'}, //2 {'.','.','.','-','-','x'}, //3 {'.','.','.','.','-','x'}, //4 {'.','.','.','.','.','x'}, //5 {'-','.','.','.','.','x'}, //6 {'-','-','.','.','.','x'}, //7 {'-','-','-','.','.','x'}, //8 {'-','-','-','-','.','x'}, //9 {'x','x','x','x','x','x'}, //: {'x','x','x','x','x','x'}, //; {'x','x','x','x','x','x'}, //< {'x','x','x','x','x','x'}, //= {'x','x','x','x','x','x'}, //> {'x','x','x','x','x','x'}, //? {'x','x','x','x','x','x'}, //@ {'.','-','x','x','x','x'}, //A -> 0x41 -> Index 17 {'-','.','.','.','x','x'}, //B -> 0x42 -> Index 18 {'-','.','-','.','x','x'}, //C {'-','.','.','x','x','x'}, //D {'.','x','x','x','x','x'}, //E {'.','.','-','.','x','x'}, //F {'.','.','-','.','x','x'}, //G {'.','.','.','.','x','x'}, //H {'.','.','x','x','x','x'}, //I {'.','-','-','-','x','x'}, //J {'-','.','-','x','x','x'}, //K {'.','-','.','.','x','x'}, //L {'-','-','x','x','x','x'}, //M {'-','.','x','x','x','x'}, //N {'-','-','-','x','x','x'}, //O {'.','-','-','.','x','x'}, //P {'-','-','.','-','x','x'}, //Q {'.','-','.','x','x','x'}, //R {'.','.','.','x','x','x'}, //S {'-','x','x','x','x','x'}, //T {'.','.','-','x','x','x'}, //U {'.','.','.','-','x','x'}, //V {'.','-','-','x','x','x'}, //W {'-','.','.','-','x','x'}, //X {'-','.','-','-','x','x'}, //Y {'-','-','.','.','x','x'}, //Z }; void setup() { Serial.begin(115200); Serial.println(); Serial.println(); Serial.println(); } void loop() { morsecodeSenden("SOS SOS", 250, 13); //Sendetext, Länge eines dit in Millisekunden, GpioPin der Led delay(5000); } void morsecodeSenden(String sendeText, uint16_t dit, uint8_t led) { char sendeZeichenfolge[50]; pinMode(led, OUTPUT); uint8_t an = 1; // einstellen ob Plus- oder Minusschaltend uint8_t aus = 0; // einstellen ob Plus- oder Minusschaltend uint16_t punktZeit; uint16_t strichZeit; uint16_t punktStrichPause; uint16_t buchstabenPause; uint16_t wortPause; punktZeit = 1 * dit; strichZeit = 3*dit; punktStrichPause = 1 * dit; buchstabenPause = 5 * dit; wortPause = 7 * dit; sendeText.toCharArray(sendeZeichenfolge, sendeText.length()+1); for(uint8_t n = 0; n < sendeText.length()+1; n++) { char sendezeichen = sendeZeichenfolge[n]; Serial.println(sendezeichen); if(sendezeichen == 0x00) // Nullterminierung des Sendetextes { Serial.println("Ausgabe beendet"); n = sendeText.length(); delay(wortPause); delay(wortPause); delay(wortPause); } else if(sendezeichen == ' ') // Leerzeichen zwischen zwei Worten { Serial.println("Leerzeichen"); delay(wortPause); } else { for(uint8_t m = 0; m < 6; m++) { Serial.println(morseCodeArray[sendezeichen - 0x30][m]); if(morseCodeArray[sendezeichen - 0x30][m] == '.') { digitalWrite(led,an); delay(punktZeit); digitalWrite(led,aus); } else if(morseCodeArray[sendezeichen - 0x30][m] == '-') { digitalWrite(led,an); delay(strichZeit); digitalWrite(led,aus); } else // x erkannt { m = 6; // -> m-Schleife beenden delay(buchstabenPause); } delay(punktStrichPause); } } } }