Der Arduino als modernes Morsegerät

Sie sind hier: WDF-Startseite

Zeichenübertragung nach Seemannskunst innovativer Art

Ton- und Lichtsignale wurden schon von Urvölkern verwendet, um Informationen rasch über große Strecken zu transportieren. Diese Idee wurde von Samuel Morse verfeinert und auf elektrische Signale übertragen. Sein Morsecode war ein Meilenstein für die Welt der Kommunikation und wird sogar heute noch in der Luft- und Schifffahrt genutzt. Heute muss jedoch niemand mehr umständlich den Code manuelle erzeugen, da dies Computer übernehmen. Dazu ist natürlich auch ein Arduino geeignet.

Galt es, Informationen rasch über große Entfernungen zu übermitteln, war vor noch gar nicht so langer Zeit das Morsen das Mittel der Wahl. Der dem Morsen zugrundeliegende Code besteht aus kurzen und langen Signalen, die vom Erfinder Samuel Morse geschickt kombiniert wurden, sodass er damit Buchstaben, Zahlen und Zeichen darstellen konnte.

In diesem Code bedeutet ein Punkt ein kurzes Aufleuchten einer Lampe und ein Strich ein längeres Aufleuchten. Das Verhältnis zwischen kurzem und langen Leuchten einer Lampe ist festgelegt, allerdings kann die Leuchtdauer für den Punkt variabel festgelegt werden. Wenn beispielsweise festgelegt wird, dass eine Lampe 0,5 Sekunden leuchten soll, um einen Punkt darzustellen, so muss die Lampe für einen Strich 1,5 Sekunden lang leuchten, da festgelegt ist, dass ein Strich immer dreimal so lange ist, wie der Punkt. Der Morsecode kann daher unterschiedlich schnell abgearbeitet werden.

Was manuell mit einer Taschenlampe möglich ist, kann natürlich auch ein Arduino übernehmen. Mit einem entsprechenden Programm ist es kein Problem, eine Lampe entsprechend des Morsecodes aufleuchten zu lassen. Besonders interessant wird es, das Programm derart auszufeilen, um einen längeren Text vollautomatisch in Morsecode umzuwandeln und die Lampe entsprechend aufleuchten zu lassen. Dazu ist vorab zu überlegen, wie das Programm beziehungsweise der Sketch strukturiert werden muss, um diese Aufgabe zu lösen.

Eine Musterlösung könnte in einem einfachen Fall wie folgt aussehen:

Der Aufbau des Morseapparats moderner Art

Ehe man sich an die Programmierung des Codes macht, sollte der Aufbau der Schaltung erfolgen, um das zu erstellende Programm immer wieder auf korrekte Funktion zu testen.

Dieser Aufbau könnte wie folgt aussehen:

Bitte von den unten zu sehenden LEDs sich nicht verwirren lassen, diese kommen erst später ins Spiel.

Der dem Aufbau zugrundeliegende Schaltplan sieht wie folgt aus:

Programmerstellung

Damit das Programm korrekt funktioniert, müssen vorab einige Variable definiert werden:

Durch die einzelnen Kommentare sollte die Variablendeklaration eigentlich selbsterklärend sein, sodass auf weitere Ausführungen an dieser Stelle verzichtet wird.

Erklärungsbedürftig ist hingegen, wie ein Sketch aussehen muss, um den Morsetext in einzelne Zeichen zu zerpflücken, die dann nacheinander von einer Lampe per Morsecode an einen Empfänger übertragen werden. Dazu ist es zunächst nötig, die Länge des Morsetextes zu ermitteln, was über den Befehl ›variablenname.lenght()‹ erfolgt. Die von diesem Befehl ermittelte Textlänge kann einer Integer-Variablen zugewiesen werden, die für die Ermittlung der einzelnen Buchstaben des Morsetextes zuständig ist. In diesem Beispiel lautet diese Variable ›SL‹, weshalb der Befehl wie folgt lauten muss:

SL=Morsetext.length ( );

Nachdem nun die Länge des Strings feststeht, kann über den Befehl ›Morsetext.substring(Anfang, Ende)‹ jedes Zeichen aus dem Morsetext ausgelesen und in die Text-Variable ›M_Zeichen‹ eingelesen werden. Dabei ist es wichtig, die Auswirkung von Anfang und Ende zu kennen. Angenommen, die Variable ›Morsetext‹ enthält die Zeichen ›ABC DEF GHI‹ so befinden sich in der Variable ›M_Zeichen‹:

M_Zeichen = Morsetext.substring() = ABC DEF GHI
M_Zeichen = Morsetext.substring(1) = BC DEF GHI
M_Zeichen = Morsetext.substring(2) = C DEF GHI
M_Zeichen = Morsetext.substring(3) =  DEF GHI
M_Zeichen = Morsetext.substring(0,1) = A
M_Zeichen = Morsetext.substring(0,3) = ABC
M_Zeichen = Morsetext.substring(2,3) = C
M_Zeichen = Morsetext.substring(0,5) = ABC D
M_Zeichen = Morsetext.substring(1,5) = BC D
M_Zeichen = Morsetext.substring(2,5) = C D

Es zeigt sich demnach, dass eine Nutzung des Befehls ohne Endwert dazu führt, dass stets der gesamte Text ab der Startposition bis zum Ende des Textes in die Variable M_Zeichen fließt. Sobald ein Endwert angegeben ist, werden nur noch diejenigen Zeichen berücksichtigt, die zwischen diesen beiden Werten eingeschlossen sind.

Folgendes Bild soll den Sachverhalt verdeutlichen:

Hier nun ein erster kurzer Sketch zum Funktionstest der Schaltung:

int Relais = 7; //Pin 7 steuert das Relais an
int Z=0;        // Zaehler
int SL=0;       // Stringlaenge
int SLmax=0;    // Stringlaenge des Morsetextes
int MZpos=1;    // Position eines einzelnen Zeichens im Morsetext
int Dit = 500;  // 0,5 Sec fuer Punkt
int Dah = 1500; // 1,5 Sec fuer Strich = 3*Dit
int Dit1 = 500; // Pause zwischen zwei gesendeten Symbolen
int Dit3 = 1500; // Pause zwischen zwei Buchstaben in einem Wort
int Dit7 = 3500; // Pause zwischen Wörtern
String M_Zeichen = "";
String Morsetext = "ABC";
void setup() {
  pinMode(Relais, OUTPUT);
  Serial.begin(9600);          // Serielle Kommunikation starten 
  SL = Morsetext.length();     // Laenge des Morsetextes
}
void loop() {
  
  Serial.println("Morsetext="+Morsetext);  // Kontrollausgabe auf Monitor
  Serial.println(SL);                     // Kontrollausgabe der Morsetextlaenge auf dem Monitor
  Serial.println(MZpos);
  M_Zeichen = Morsetext.substring(MZpos,MZpos-1); // Einzelnes Zeichen aus Morsetext auslesen
  Serial.println("M_Zeichen: "+M_Zeichen);        // Kontrollausgabe des Zeichens auf dem Monitor
    if (M_Zeichen == "A")
      {
      Serial.println("Zeichen: A");  // Kontrollausgabe auf Monitor
      digitalWrite(Relais, HIGH);   delay(Dit); //kurz             
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dah); //lang             
      digitalWrite(Relais, LOW);    delay(Dit3); //pause
      }
   if (M_Zeichen == "B")
      {
      Serial.println("Zeichen: B"); // Kontrollausgabe auf Monitor 
      digitalWrite(Relais, HIGH);   delay(Dah); //lang
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dit); //kurz             
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dit); //kurz             
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dit); //kurz             
      digitalWrite(Relais, LOW);    delay(Dit3); //pause
      } 
   if (M_Zeichen == "C")
      {
      Serial.println("Zeichen: C"); // Kontrollausgabe auf Monitor 
      digitalWrite(Relais, HIGH);   delay(Dah); //lang
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dit); //kurz             
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dah); //lang
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dit); //kurz             
      digitalWrite(Relais, LOW);    delay(Dit3); //pause
      }
     MZpos = MZpos+1;             // Zaehler erhoehen
     if (MZpos>SL) { MZpos = 1; } // Wenn Zeichenlaenge erreicht, dann auf Start setzen
}

Bei diesem Programm wird der Text in der Variablen ›Morsetext‹ Zeichenweise ausgelesen. Jedes Zeichen wird in die Variable ›M_Zeichen‹ eingelesen. Dieses Zeichen wird durch die if-Abfragen ausgewertet und die jeweils passende Routine gestartet, von wo das Relais angesteuert wird und die Lampe den entsprechenden Morsecode ausgibt.

Bei diesem Test fällt auf, dass der Morsecode sehr schnell ausgegeben wird und ungeübte Betrachter nicht prüfen könne, ob das passende Zeichen ausgegeben wurde. Es bietet sich daher an, per LED die einzelnen Zeichen zu trennen, um zu erkennen, wann ein Zeichen endet und ein neues beginnt. Darüber hinaus wäre es angenehm, wenn die Morseroutine erst dann startet, nachdem eine Taste gedrückt wurde.

Um diese Ideen umzusetzen, muss die Schaltung angepasst werden:

Die Erweiterung mit einem Taster hat zur Folge, dass das Programm ebenfalls angepasst werden muss. Dazu muss man sich vor Augen halten, dass void loop() ständig durchlaufen wird. Würde keine Anpassung der if-Abfragen hinsichtlich des Tastendrucks für das Startsignal erfolgen, so wäre der Tastendruck praktisch wirkungslos und jedes Mal, wenn ein passendes Zeichen erscheint, würde der zugehörige Morsecode ausgegeben. Also müssen die if-Abfragen mit dem Tastendruck verknüpft werden, was sinnvollerweise per UND-Funktion erfolgt. Dadurch wird eine Morseroutine nur durchlaufen, wenn das passende Zeichen erkannt UND der Starttaster gedrückt wurde.

Diese UND-Verknüpfung wird über ein doppeltes kaufmännisches &-Zeichen erreicht. Somit wird beispielsweise der Morsecode für den Buchstaben ›A‹ nur dann ausgegeben, wenn die if-Abfrage wie folgt erweitert wird: if (M_Zeichen == "A" && Starttaster == 1).

Unterprogramme

Unterprogramme sind dazu da, wiederkehrenden Code auszuführen. Sie sollten immer dann eingerichtet werden, wenn sich bei der Programmentwicklung abzeichnet, dass an verschiedenen Stellen immer wieder die gleiche Aufgabe abzuarbeiten ist.

Im Fall des Morseprogramms ist dies der Fall. Hier werden immer wieder LEDs ein- und ausgeschaltet. Es bietet sich daher an, dafür ein Unterprogramm zu schreiben, damit an verschiedene Stellen des Hauptprogramms mit nur einem Befehl immer wiederkehrende Befehle abgearbeitet werden. Zu beachten ist unbedingt, dass Unterprogramme stets vor dem Hauptprogramm angelegt werden müssen, damit diese erkannt werden!

Das Unterprogramm wird mit dem Befehl ›void‹ eingeleitet, dem ein beliebiges Schlüsselwort folgt, das später zum Aufruf des Unterprogramms dient.

Das Schema zum Einbau von Unterprogrammen in einen Sketch sieht wie folgt aus:

Zum Beispiel wird mit folgendem Unterprogramm die rote LED ein- und ausgeschaltet, um die Morsepause zwischen zwei Zeichen anzuzeigen:

   {
     digitalWrite(Rot, HIGH);    // Rote LED einschalten             
     digitalWrite(Relais, LOW);    delay(Dit3); // Pausenlänge
     digitalWrite(Rot, LOW);    // Rote LED ausschalten
   }

Der Aufruf aus dem Hauptprogramm erfolgt aus dem void loop-Teil mit nur einem Befehl:

Morsepause();

Folgendes Bild zeigt das Aufleuchten der roten LED in der Pause zwischen zwei Zeichen:

Wird hingegen ein Zeichen gemorst, so wird dies von einer grünen LED signalisiert:

Beim Ablaufen des Programms fällt weiter negativ auf, dass der Morsecode immer wieder neu durchlaufen und gesendet wird, auch wenn bereits das Ende des Textes erreicht ist. Es muss also noch eine Möglichkeit eingebaut werden, die Morseroutinen zu sperren, sobald das Textende erreicht ist. Dies kann auf unterschiedliche Weise geschehen. Optimal ist es jedoch, das #-Zeichen als Ende-Zeichen zu verwenden und deren Auftauchen auch über den Morsecode zu senden. Auf diese Weise wird nicht nur das Programm beendet, sondern auch dem Empfänger der Morsebotschaft mitgeteilt, dass die Übertragung beendet ist.

Sinnvollerweise wird das Programm dann so erweitert, dass alle LEDs aufleuchten, wenn das Ende der Übertragung erreicht ist. So wird klar signalisiert, dass die Übertragung beendet ist und durch Drücken des Tasters neu gestartet werden kann.

Das dazu nötige Programm könnte wie folgt aussehen:

int Relais = 7; //Pin 7 steuert das Relais an
int Rot = 4;    //Pin 4 steuert rote LED an
int Gelb = 5;   //Pin 5 steuert gelbe LED an
int Gruen = 6;  //Pin 6 steuert grüne LED an
int tasterPin = A2;  // Analogeingang 2 nimmt Tastersignal auf
int tasterStatus;    // Variable für Status des Tasters
int Starttaster = 0; // 0=nicht betätigt 1=betätigt
int Z=0;        // Zaehler
int SL=0;       // Stringlaenge
int SLmax=0;    // Stringlaenge des Morsetextes
int MZpos=1;    // Position eines einzelnen Zeichens im Morsetext
int Dit = 500;  // 0,5 Sec fuer Punkt (500)
int Dah = 1500; // 1,5 Sec fuer Strich = 3*Dit (1500)
int Dit1 = 500; // Pause zwischen zwei gesendeten Symbolen (500)
int Dit3 = 1500; // Pause zwischen zwei Buchstaben in einem Wort (1500)
int Dit7 = 3500; // Pause zwischen Wörtern 7*Dit (3500)
String M_Zeichen = "";     // In dieser Variablen wird ein einzelnes Zeichen aus dem Morsetext gespeichert
String Morsetext = "ABC#"; // Dieser Text wird gemorst

void GLED_on() // ****Unterprogramm: Grüne LED einschalten
   {
     digitalWrite(Gruen, HIGH);    // Grüne LED einschalten
   }

void GLED_off() // ****Unterprogramm: Grüne LED ausschalten
   {
     digitalWrite(Gruen, LOW);    // Grüne LED einschalten
   }   

void Morsepause() // ****Unterprogramm: Morsepause zwischen zwei Zeichen mit roter LED anzeigen
   {
     digitalWrite(Rot, HIGH);    // Rote LED einschalten             
     digitalWrite(Relais, LOW);    delay(Dit3); // Pausenlänge
     digitalWrite(Rot, LOW);    // Rote LED ausschalten
   }

void LEDreset() // ****Unterprogramm: alle LEDs loeschen
   {
     digitalWrite(Gruen, LOW);   // Grüne LED einschalten
     digitalWrite(Rot, LOW);    // Rote LED einschalten             
     digitalWrite(Gelb, LOW);    // Gelbe LED einschalten=Pause
    }

void Morseende() // ****Unterprogramm: Morsen nach Zeichen # beenden
   {
     digitalWrite(Gruen, HIGH);   // Grüne LED einschalten
     digitalWrite(Rot, HIGH);    // Rote LED einschalten             
     digitalWrite(Gelb, HIGH);    // Gelbe LED einschalten=Pause
     Starttaster=0;              // Startatster wurde noch nicht betätigt bzw. zurückgesetzt
   }

void setup() {
  pinMode(Relais, OUTPUT);  // Pin 7 als Ausgang setzen
  pinMode(Rot, OUTPUT);     // Pin 4 als Ausgang setzen
  pinMode(Gelb, OUTPUT);    // Pin 5 als Ausgang setzen
  pinMode(Gruen, OUTPUT);   // Pin 6 als Ausgang setzen
  Serial.begin(9600);          // Serielle Kommunikation starten 
  SL = Morsetext.length();     // Laenge des Morsetextes
  pinMode(A2,INPUT);           // Analogeingang A2 als Digitaleingang festlegen
}

void loop() {
  tasterStatus=digitalRead(tasterPin);     // Tasterstatus feststellen
  Serial.println("Morsetext="+Morsetext);  // Kontrollausgabe auf Monitor
  Serial.println(SL);                     // Kontrollausgabe der Morsetextlaenge auf dem Monitor
  Serial.print(MZpos);
  //Serial.println("MZpos+1: "+MZpos+1);
  M_Zeichen = Morsetext.substring (MZpos-1,MZpos); // Einzelnes Zeichen aus Morsetext auslesen (Auslassen, Einschliessen)
  Serial.println("M_Zeichen: "+M_Zeichen);        // Kontrollausgabe des Zeichens auf dem Monitor

   if (tasterStatus==HIGH && Starttaster == 0)   // Start-Taster wurde betätigt
      {
       Starttaster=1; // Startatster wurde betätigt
       MZpos=1;       // Erstes Zeichen im Text lesen
       LEDreset();     // ****Unterprogramm: alle LEDs loeschen
      }
    
   if (M_Zeichen == " " && Starttaster == 1) // Leerzeichen zwischen zwei Wörtern
      {
      digitalWrite(Gelb, HIGH);    // Gelbe LED einschalten=Pause             
      digitalWrite(Relais, LOW);    delay(Dit7); //pause
      digitalWrite(Gelb, LOW);    // Gelbe LED ausschalten
      }
  if (M_Zeichen == "A" && Starttaster == 1)
      {
      GLED_on();   // Grüne LED einschalten
      //digitalWrite(Gruen, HIGH);    // Grüne LED einschalten
      Serial.println("Zeichen erkannt: A");  // Kontrollausgabe auf Monitor
      digitalWrite(Relais, HIGH);   delay(Dit); //kurz             
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dah); //lang
      GLED_off();                  // Grüne LED ausschalten
      Morsepause();                // Rote LED zeigt Morsepause zwischen zwei Zeichen an
      }
   if (M_Zeichen == "B" && Starttaster == 1)
      {
      GLED_on();                    // Grüne LED einschalten  
      Serial.println("Zeichen: B"); // Kontrollausgabe auf Monitor 
      digitalWrite(Relais, HIGH);   delay(Dah); //lang
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dit); //kurz             
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dit); //kurz             
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dit); //kurz             
      GLED_off();                  // Grüne LED ausschalten
      Morsepause();                // Rote LED zeigt Morsepause zwischen zwei Zeichen an
      } 
   if (M_Zeichen == "C" && Starttaster == 1)
      {
      GLED_on();                    // Grüne LED einschalten
      Serial.println("Zeichen: C"); // Kontrollausgabe auf Monitor 
      digitalWrite(Relais, HIGH);   delay(Dah); //lang
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dit); //kurz             
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dah); //lang
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dit); //kurz             
      GLED_off();                  // Grüne LED ausschalten
      Morsepause();                // Rote LED zeigt Morsepause zwischen zwei Zeichen an
      }
       if (M_Zeichen == "D" && Starttaster == 1)
      {
      GLED_on();                    // Grüne LED einschalten
      Serial.println("Zeichen: D"); // Kontrollausgabe auf Monitor 
      digitalWrite(Relais, HIGH);   delay(Dah); //lang
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dit); //kurz             
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dit); //kurz             
      GLED_off();                  // Grüne LED ausschalten
      Morsepause();                // Rote LED zeigt Morsepause zwischen zwei Zeichen an
      }
       if (M_Zeichen == "E" && Starttaster == 1)
      {
      GLED_on();                    // Grüne LED einschalten
      Serial.println("Zeichen: E"); // Kontrollausgabe auf Monitor 
      digitalWrite(Relais, HIGH);   delay(Dit); //kurz             
      GLED_off();                  // Grüne LED ausschalten
      Morsepause();                // Rote LED zeigt Morsepause zwischen zwei Zeichen an
      }
       if (M_Zeichen == "F" && Starttaster == 1)
      {
      GLED_on();                    // Grüne LED einschalten
      Serial.println("Zeichen: F"); // Kontrollausgabe auf Monitor 
      digitalWrite(Relais, HIGH);   delay(Dit); //kurz
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dit); //kurz             
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dah); //lang
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dit); //kurz             
      GLED_off();                  // Grüne LED ausschalten
      Morsepause();                // Rote LED zeigt Morsepause zwischen zwei Zeichen an
      }
       if (M_Zeichen == "G" && Starttaster == 1)
      {
      GLED_on();                    // Grüne LED einschalten
      Serial.println("Zeichen: C"); // Kontrollausgabe auf Monitor 
      digitalWrite(Relais, HIGH);   delay(Dah); //lang
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dah); //lang             
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dit); //kurz             
      GLED_off();                  // Grüne LED ausschalten
      Morsepause();                // Rote LED zeigt Morsepause zwischen zwei Zeichen an
      }
       if (M_Zeichen == "H" && Starttaster == 1)
      {
      GLED_on();                    // Grüne LED einschalten
      Serial.println("Zeichen: H"); // Kontrollausgabe auf Monitor 
      digitalWrite(Relais, HIGH);   delay(Dit); //kurz
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dit); //kurz             
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dit); //kurz
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dit); //kurz             
      GLED_off();                  // Grüne LED ausschalten
      Morsepause();                // Rote LED zeigt Morsepause zwischen zwei Zeichen an
      }
      if (M_Zeichen == "I" && Starttaster == 1)
      {
      GLED_on();                    // Grüne LED einschalten
      Serial.println("Zeichen: I"); // Kontrollausgabe auf Monitor 
      digitalWrite(Relais, HIGH);   delay(Dit); //kurz
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dit); //kurz             
      GLED_off();                  // Grüne LED ausschalten
      Morsepause();                // Rote LED zeigt Morsepause zwischen zwei Zeichen an
      }
      if (M_Zeichen == "J" && Starttaster == 1)
      {
      GLED_on();                    // Grüne LED einschalten
      Serial.println("Zeichen: J"); // Kontrollausgabe auf Monitor 
      digitalWrite(Relais, HIGH);   delay(Dit); //kurz
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dah); //lang             
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dah); //lang             
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dah); //lang             
      GLED_off();                  // Grüne LED ausschalten
      Morsepause();                // Rote LED zeigt Morsepause zwischen zwei Zeichen an
      }
      if (M_Zeichen == "K" && Starttaster == 1)
      {
      GLED_on();                    // Grüne LED einschalten
      Serial.println("Zeichen: K"); // Kontrollausgabe auf Monitor 
      digitalWrite(Relais, HIGH);   delay(Dah); //lang             
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dit); //kurz
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dah); //lang             
      GLED_off();                  // Grüne LED ausschalten
      Morsepause();                // Rote LED zeigt Morsepause zwischen zwei Zeichen an
      }
      if (M_Zeichen == "L" && Starttaster == 1)
      {
      GLED_on();                    // Grüne LED einschalten
      Serial.println("Zeichen: L"); // Kontrollausgabe auf Monitor 
      digitalWrite(Relais, HIGH);   delay(Dit); //kurz
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dah); //lang             
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dit); //kurz
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dit); //kurz
      GLED_off();                  // Grüne LED ausschalten
      Morsepause();                // Rote LED zeigt Morsepause zwischen zwei Zeichen an
      }
      if (M_Zeichen == "M" && Starttaster == 1)
      {
      GLED_on();                    // Grüne LED einschalten
      Serial.println("Zeichen: M"); // Kontrollausgabe auf Monitor 
      digitalWrite(Relais, HIGH);   delay(Dah); //lang             
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dah); //lang             
      GLED_off();                  // Grüne LED ausschalten
      Morsepause();                // Rote LED zeigt Morsepause zwischen zwei Zeichen an
      }
      if (M_Zeichen == "N" && Starttaster == 1)
      {
      GLED_on();                    // Grüne LED einschalten
      Serial.println("Zeichen: N"); // Kontrollausgabe auf Monitor 
      digitalWrite(Relais, HIGH);   delay(Dah); //lang             
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dit); //kurz             
      GLED_off();                  // Grüne LED ausschalten
      Morsepause();                // Rote LED zeigt Morsepause zwischen zwei Zeichen an
      }
      if (M_Zeichen == "O" && Starttaster == 1)
      {
      GLED_on();                    // Grüne LED einschalten
      Serial.println("Zeichen: O"); // Kontrollausgabe auf Monitor 
      digitalWrite(Relais, HIGH);   delay(Dah); //lang             
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dah); //lang             
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dah); //lang             
      GLED_off();                  // Grüne LED ausschalten
      Morsepause();                // Rote LED zeigt Morsepause zwischen zwei Zeichen an
      }
      if (M_Zeichen == "P" && Starttaster == 1)
      {
      GLED_on();                    // Grüne LED einschalten
      Serial.println("Zeichen: P"); // Kontrollausgabe auf Monitor 
      digitalWrite(Relais, HIGH);   delay(Dit); //kurz
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dah); //lang             
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dah); //lang             
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dit); //kurz
      GLED_off();                  // Grüne LED ausschalten
      Morsepause();                // Rote LED zeigt Morsepause zwischen zwei Zeichen an
      }
      if (M_Zeichen == "Q" && Starttaster == 1)
      {
      GLED_on();                    // Grüne LED einschalten
      Serial.println("Zeichen: Q"); // Kontrollausgabe auf Monitor 
      digitalWrite(Relais, HIGH);   delay(Dah); //lang             
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dah); //lang             
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dit); //kurz
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dah); //lang
      GLED_off();                  // Grüne LED ausschalten
      Morsepause();                // Rote LED zeigt Morsepause zwischen zwei Zeichen an
      }
      if (M_Zeichen == "R" && Starttaster == 1)
      {
      GLED_on();                    // Grüne LED einschalten
      Serial.println("Zeichen: R"); // Kontrollausgabe auf Monitor 
      digitalWrite(Relais, HIGH);   delay(Dit); //kurz
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dah); //lang             
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dit); //kurz
      GLED_off();                  // Grüne LED ausschalten
      Morsepause();                // Rote LED zeigt Morsepause zwischen zwei Zeichen an
      }
      if (M_Zeichen == "S" && Starttaster == 1)
      {
      GLED_on();                    // Grüne LED einschalten
      Serial.println("Zeichen: S"); // Kontrollausgabe auf Monitor 
      digitalWrite(Relais, HIGH);   delay(Dit); //kurz
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dit); //kurz
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dit); //kurz
      GLED_off();                  // Grüne LED ausschalten
      Morsepause();                // Rote LED zeigt Morsepause zwischen zwei Zeichen an
      }
      if (M_Zeichen == "T" && Starttaster == 1)
      {
      GLED_on();                    // Grüne LED einschalten
      Serial.println("Zeichen: T"); // Kontrollausgabe auf Monitor 
      digitalWrite(Relais, HIGH);   delay(Dah); //lang
      GLED_off();                  // Grüne LED ausschalten
      Morsepause();                // Rote LED zeigt Morsepause zwischen zwei Zeichen an
      }
      if (M_Zeichen == "U" && Starttaster == 1)
      {
      GLED_on();                    // Grüne LED einschalten
      Serial.println("Zeichen: U"); // Kontrollausgabe auf Monitor 
      digitalWrite(Relais, HIGH);   delay(Dit); //kurz
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dit); //kurz
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dah); //lang
      GLED_off();                  // Grüne LED ausschalten
      Morsepause();                // Rote LED zeigt Morsepause zwischen zwei Zeichen an
      }
      if (M_Zeichen == "V" && Starttaster == 1)
      {
      GLED_on();                    // Grüne LED einschalten
      Serial.println("Zeichen: V"); // Kontrollausgabe auf Monitor 
      digitalWrite(Relais, HIGH);   delay(Dit); //kurz
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dit); //kurz
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dit); //kurz
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dah); //lang
      GLED_off();                  // Grüne LED ausschalten
      Morsepause();                // Rote LED zeigt Morsepause zwischen zwei Zeichen an
      }
      if (M_Zeichen == "W" && Starttaster == 1)
      {
      GLED_on();                    // Grüne LED einschalten
      Serial.println("Zeichen: W"); // Kontrollausgabe auf Monitor 
      digitalWrite(Relais, HIGH);   delay(Dit); //kurz
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dah); //lang             
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dah); //lang
      GLED_off();                  // Grüne LED ausschalten
      Morsepause();                // Rote LED zeigt Morsepause zwischen zwei Zeichen an
      }
      if (M_Zeichen == "X" && Starttaster == 1)
      {
      GLED_on();                    // Grüne LED einschalten
      Serial.println("Zeichen: X"); // Kontrollausgabe auf Monitor 
      digitalWrite(Relais, HIGH);   delay(Dah); //lang             
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dit); //kurz
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dit); //kurz
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dah); //lang
      GLED_off();                  // Grüne LED ausschalten
      Morsepause();                // Rote LED zeigt Morsepause zwischen zwei Zeichen an
      }
      if (M_Zeichen == "Y" && Starttaster == 1)
      {
      GLED_on();                    // Grüne LED einschalten
      Serial.println("Zeichen: Y"); // Kontrollausgabe auf Monitor 
      digitalWrite(Relais, HIGH);   delay(Dah); //lang             
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dit); //kurz
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dah); //lang             
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dah); //lang
      GLED_off();                  // Grüne LED ausschalten
      Morsepause();                // Rote LED zeigt Morsepause zwischen zwei Zeichen an
      }
      if (M_Zeichen == "Z" && Starttaster == 1)
      {
      GLED_on();                    // Grüne LED einschalten
      Serial.println("Zeichen: Z"); // Kontrollausgabe auf Monitor 
      digitalWrite(Relais, HIGH);   delay(Dah); //lang             
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dah); //lang             
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dit); //kurz
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dit); //kurz
      GLED_off();                  // Grüne LED ausschalten
      Morsepause();                // Rote LED zeigt Morsepause zwischen zwei Zeichen an
      }
      if (M_Zeichen == "1" && Starttaster == 1)
      {
      GLED_on();                    // Grüne LED einschalten
      Serial.println("Zeichen: 1"); // Kontrollausgabe auf Monitor 
      digitalWrite(Relais, HIGH);   delay(Dit); //kurz
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dah); //lang             
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dah); //lang             
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dah); //lang             
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dah); //lang
      GLED_off();                  // Grüne LED ausschalten
      Morsepause();                // Rote LED zeigt Morsepause zwischen zwei Zeichen an
      }
      if (M_Zeichen == "2" && Starttaster == 1)
      {
      GLED_on();                    // Grüne LED einschalten
      Serial.println("Zeichen: 2"); // Kontrollausgabe auf Monitor 
      digitalWrite(Relais, HIGH);   delay(Dit); //kurz
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dit); //kurz
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dah); //lang             
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dah); //lang             
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dah); //lang
      GLED_off();                  // Grüne LED ausschalten
      Morsepause();                // Rote LED zeigt Morsepause zwischen zwei Zeichen an
      }
      if (M_Zeichen == "3" && Starttaster == 1)
      {
      GLED_on();                    // Grüne LED einschalten
      Serial.println("Zeichen: 3"); // Kontrollausgabe auf Monitor 
      digitalWrite(Relais, HIGH);   delay(Dit); //kurz
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dit); //kurz
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dit); //kurz
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dah); //lang             
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dah); //lang
      GLED_off();                  // Grüne LED ausschalten
      Morsepause();                // Rote LED zeigt Morsepause zwischen zwei Zeichen an
      }
      if (M_Zeichen == "4" && Starttaster == 1)
      {
      GLED_on();                    // Grüne LED einschalten
      Serial.println("Zeichen: 4"); // Kontrollausgabe auf Monitor 
      digitalWrite(Relais, HIGH);   delay(Dit); //kurz
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dit); //kurz
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dit); //kurz
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dit); //kurz
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dah); //lang
      GLED_off();                  // Grüne LED ausschalten
      Morsepause();                // Rote LED zeigt Morsepause zwischen zwei Zeichen an
      }
      if (M_Zeichen == "5" && Starttaster == 1)
      {
      GLED_on();                    // Grüne LED einschalten
      Serial.println("Zeichen: 5"); // Kontrollausgabe auf Monitor 
      digitalWrite(Relais, HIGH);   delay(Dit); //kurz
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dit); //kurz
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dit); //kurz
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dit); //kurz
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dit); //kurz
      GLED_off();                  // Grüne LED ausschalten
      Morsepause();                // Rote LED zeigt Morsepause zwischen zwei Zeichen an
      }
      if (M_Zeichen == "6" && Starttaster == 1)
      {
      GLED_on();                    // Grüne LED einschalten
      Serial.println("Zeichen: 6"); // Kontrollausgabe auf Monitor 
      digitalWrite(Relais, HIGH);   delay(Dah); //lang             
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dit); //kurz
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dit); //kurz
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dit); //kurz
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dit); //kurz
      GLED_off();                  // Grüne LED ausschalten
      Morsepause();                // Rote LED zeigt Morsepause zwischen zwei Zeichen an
      }
      if (M_Zeichen == "7" && Starttaster == 1)
      {
      GLED_on();                    // Grüne LED einschalten
      Serial.println("Zeichen: 7"); // Kontrollausgabe auf Monitor 
      digitalWrite(Relais, HIGH);   delay(Dah); //lang             
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dah); //lang             
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dit); //kurz
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dit); //kurz
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dit); //kurz
      GLED_off();                  // Grüne LED ausschalten
      Morsepause();                // Rote LED zeigt Morsepause zwischen zwei Zeichen an
      }
      if (M_Zeichen == "8" && Starttaster == 1)
      {
      GLED_on();                    // Grüne LED einschalten
      Serial.println("Zeichen: 8"); // Kontrollausgabe auf Monitor 
      digitalWrite(Relais, HIGH);   delay(Dah); //lang             
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dah); //lang             
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dah); //lang             
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dit); //kurz
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dit); //kurz
      GLED_off();                  // Grüne LED ausschalten
      Morsepause();                // Rote LED zeigt Morsepause zwischen zwei Zeichen an
      }
      if (M_Zeichen == "9" && Starttaster == 1)
      {
      GLED_on();                    // Grüne LED einschalten
      Serial.println("Zeichen: 9"); // Kontrollausgabe auf Monitor 
      digitalWrite(Relais, HIGH);   delay(Dah); //lang             
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dah); //lang             
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dah); //lang             
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dah); //lang             
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dit); //kurz
      GLED_off();                  // Grüne LED ausschalten
      Morsepause();                // Rote LED zeigt Morsepause zwischen zwei Zeichen an
      }
      if (M_Zeichen == "0" && Starttaster == 1)
      {
      GLED_on();                    // Grüne LED einschalten
      Serial.println("Zeichen: 0"); // Kontrollausgabe auf Monitor 
      digitalWrite(Relais, HIGH);   delay(Dah); //lang             
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dah); //lang             
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dah); //lang             
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dah); //lang             
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dah); //lang
      GLED_off();                  // Grüne LED ausschalten
      Morsepause();                // Rote LED zeigt Morsepause zwischen zwei Zeichen an
      }
      if (M_Zeichen == "+" && Starttaster == 1)
      {
      GLED_on();                    // Grüne LED einschalten
      Serial.println("Zeichen: +"); // Kontrollausgabe auf Monitor 
      digitalWrite(Relais, HIGH);   delay(Dit); //kurz
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dah); //lang             
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dit); //kurz
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dah); //lang             
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dit); //kurz
      GLED_off();                  // Grüne LED ausschalten
      Morsepause();                // Rote LED zeigt Morsepause zwischen zwei Zeichen an
      }
      if (M_Zeichen == "?" && Starttaster == 1)
      {
      GLED_on();                    // Grüne LED einschalten
      Serial.println("Zeichen: ?"); // Kontrollausgabe auf Monitor 
      digitalWrite(Relais, HIGH);   delay(Dit); //kurz
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dit); //kurz
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dah); //lang             
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dah); //lang             
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dit); //kurz
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dit); //kurz
      GLED_off();                  // Grüne LED ausschalten
      Morsepause();                // Rote LED zeigt Morsepause zwischen zwei Zeichen an
      }
      if (M_Zeichen == "#" && Starttaster == 1)        // Ende-Zeichen
      {
      GLED_on();                    // Grüne LED einschalten
      Serial.println("Zeichen: #"); // Kontrollausgabe auf Monitor 
      digitalWrite(Relais, HIGH);   delay(Dit); //kurz
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dit); //kurz
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dit); //kurz
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dah); //lang             
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dit); //kurz
      digitalWrite(Relais, LOW);    delay(Dit); //pause
      digitalWrite(Relais, HIGH);   delay(Dah); //lang
      digitalWrite(Relais, LOW);    delay(Dit); // Morselampe ausschalten
     // GLED_off();                  // Grüne LED ausschalten
      Morseende();                // Alle LEDs einschalten zeigt Morseende an
      }
      
     MZpos = MZpos+1;             // Zaehler erhoehen
     if (MZpos>SL) { MZpos = 1; } // Wenn Zeichenlaenge erreicht, dann auf Start setzen

  
}

Sobald der komplette Text gesendet wurde, sorgt das Programm dafür, dass alle LEDs aufleuchten.


********