Der Arduino als modernes Morsegerät
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.
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.
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:
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.
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 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.
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
}
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
}