====== Morsen mit dem Arduino ======
Morsecode verwendet drei Symbole, die ''Punkt'' (''' · '''), ''Strich'' ('''−''') und ''Pause'' ( ) genannt werden, gesprochen als ''dit'', ''dah'' (oder ''doh'') und „Schweigen“. Die Länge eines ''Dit'' bestimmt die Geschwindigkeit, mit der gesendet werden kann, und ist die grundlegende Zeiteinheit. Dazu ein Beispiel:
−− −−− ·−· ··· · / −·−· −−− −·· ·
M O R S E (space) C O D E
Genauer gilt Folgendes:
* Ein ''Dah'' ist dreimal so lang wie ein ''Dit''.
* Die Pause zwischen zwei gesendeten Symbolen ist ein ''Dit'' lang.
* Zwischen Buchstaben in einem Wort wird eine Pause von der Länge eines ''Dah'' (oder drei ''Dits'') eingeschoben.
* Die Länge der Pause zwischen Wörtern entspricht sieben ''Dits''.
Für das Beispiel „MORSE CODE“ ergibt sich dann dieses Zeitsignal
(das Zeichen = bedeutet „Signal an“, das Zeichen _ bedeutet „Signal aus“):
===_===___===_===_===___=_===_=___=_=_=___=_______===_=_===_=___===_===_===___===_=_=___=
^ ^ ^ ^ ^
Dah| | Dit Wortabstand
| Buchstabenabstand
Symbolabstand
„Gesprochen“ klingt das dann so: ''dahdah dahdahdah ditdahdit ditditdit dit, dahditdahdit dahdahdah dahditdit dit''.
Quelle: https://de.wikipedia.org/wiki/Morsezeichen((Seite „Morsezeichen“. In: Wikipedia, Die freie Enzyklopädie. Bearbeitungsstand: 19. Juni 2016, 12:51 UTC. URL: https://de.wikipedia.org/w/index.php?title=Morsezeichen&oldid=155440419 (Abgerufen: 19. Juni 2016, 16:28 UTC))
===== Allgemeine Form eines Unterprogramms =====
{{ .:auswahl_007.png |}}
* **Rückgabetyp:** Gibt den Datentyp des Werts an, der zurückgegeben wird. (Siehe Beispiel 3) Wird kein Wert zurückgegeben, dann wird hier der Befehl void ("leer") verwendet. (Siehe Beispiel 1 und 2)
* **Funktionsname:** Frei wählbarer Namen des Unterprogramms bzw. der Funktion.
* **Paramaterliste:** Hier stehen die Werte, die an das Unterprogramm übergeben werden. Die Parameterliste kann auch leer bleiben.
===== Funktionen für "Dah" und "Dit" =====
----
{{:aufgabe.png?nolink |}}
=== (A1) ===
* Schließe eine LED korekt an den Pin 8 des Arduino an.
* Übernehme das folgende Programm in die Arduino Umgebung und ergänze es so, dass es sich übersetzen lässt.
* Übertrage es auf den Arduino und führe es aus.
* Verändere das Programm so, dass es eine Botschaft aus mehreren Worten korrekt sendet. ((Die Codetabelle für Morsecode findest du hier: https://de.wikipedia.org/wiki/Morsezeichen#Standard-Codetabelle))
// LED-Pin
int led=FIXME;
// Laenge eines Dit in Millisekunden
int timedit=FIXME;
void setup() {
// Pin in Ausgabemodus...
pinMode(led,OUTPUT);
}
void loop() {
// Lange Pause, bevors losgeht...
digitalWrite(led,LOW);
delay(10000);
// Sendesequenz:
sendDit();
pause("dit");
sendDah();
pause("dit");
sendDah()FIXME
pause("zeichen");
sendDah();
pause("dit");
sendDit();
pause(FIXME);
}
// Eigene Funktionen
void sendDit() {
digitalWrite(led,LOW);
digitalWrite(led,HIGH);
// ein "timedit" lang anlassen!
delay(timedit);
digitalWrite(led,LOW);
}
void sendDah() {
digitalWrite(led,LOW);
digitalWrite(led,HIGH);
// drei "timedit" lang anlassen!
delay(3*timedit);
digitalWrite(led,LOW);
}
void pause(String dauer) {
if ( dauer == "dit") {
digitalWrite(led,LOW);
// ein "timedit" lang anlassen!
delay(timedit);
digitalWrite(led,LOW);
}
if ( dauer == "zeichen") {
digitalWrite(led,LOW);
// drei "timedit" lang anlassen!
delay(3*timedit);
digitalWrite(led,LOW);
}
if ( dauer == "wort") {
digitalWrite(led,LOW);
// drei "timedit" lang anlassen!
delay(7*timedit);
digitalWrite(led,LOW);
}
}
----
{{:aufgabe.png?nolink |}}
=== (A2) ===
* Ergänze dein Setup um eine weitere (rote) LED, verwende zum morsen eine grüne oder gelbe LED. Füge die neue LED in das setup des Programms ein.
* Ergänze das Programm um eine Funktion ''sendeBuchstabe'' (siehe Vorlage unten). Diese Funktion soll ein Zeichen als Argument erhalten, das Sie als Morsecode ausgibt.#
* Implementiere einige Buchstaben, so dass du ein kurzes Wort ausgeben kannst.
* Überlege dir, was bei einem Leerzeichen passieren sollte.
* Lasse die rote LED drei Sekunden leuchten, wenn ein Buchstabe übergeben wird, für den kein Morsecode hinterlegt ist.
**Achtung!** Zeichenketten (Strings) werden in doppelte Anführungszeichen eingeschlossen, einzelne Zeichen (Chars) werden in einfach anführungszeichen eingeschlossen!
[ .... Globale variablen, Setup und so Zeug .... ]
void loop() {
[....]
// Sendesequenz:
sendBuchstabe('a');
sendBuchstabe('b');
[....]
}
// Die Buchstabenfunktion - ein Skelett
// Es wird der Buchstabe erwartet, der gesendet werden soll
// Die anderen Funktionen werden verwendet, um den Buchstaben zu senden
// Arbeit: Die Morsecodes müssen hinterlegt werden.
void sendBuchstabe(char buchstabe) {
switch (buchstabe) {
case 'a':
//Morsecode für a
sendDit();
pause("dit");
sendDah();
break;
case 'b':
sendDah();
pause("dit");
sendDit();
pause("dit");
sendDit();
pause("dit");
sendDit();
break;
case [....]
[....]
}
// Mindestend ein dit Pause zwischen den Zeichen
pause("dit");
}
[ .... die anderen Funktionen .... ]