|
Morse-Code "SOS" ausgeben (und: eigene Funktionen)
Ziele:
Die Board-LED soll den Morse-Code "SOS" (drei kurz, drei lang,
drei kurz, Pause) ausgeben.
Ein Lernziel dabei ist es, den Umgang mit eigenen "Funktionen"
(woanders auch "Methoden" genannt) kennen zu lernen.
Schaltung:
Es muss nichts aufgebaut werden. Es wird einfach die Board-LED
benutzt.
Der Programmquelltext:
Gesprochen klingt der SOS-Morsecode in
etwa: "dididid dadada dididid".
int
kurz = 150;
int lang = 800;
void setup (){
pinMode(13, OUTPUT); //Board-LED
}
void loop () {
s();
o();
s();
delay(1000);
}
void s(){
did(); did(); did(); delay(200);
}
void o(){
da(); da(); da(); delay(200);
}
void did(){
digitalWrite(13, HIGH); delay(kurz);
digitalWrite(13, LOW);
delay(kurz);
}
void da(){
digitalWrite(13, HIGH); delay(lang);
digitalWrite(13, LOW);
delay(kurz);
}
Eigene Funktionen?
Zwei Funktionen kennst Du ja bereits: die setup-Funktion
und die loop-Funktion - sie kommen in jedem
Arduino-Programm vor.
Zusätzlich zu ihnen können auch eigene Funktionen
benutzt werden:
- um wiederkehrende Programmteile nur einmal programmieren
zu müssen.
- die Lesbarkeit Deines Programmes zu verbessern
Zum Erzeugen des Buchstaben "s" wird die s-Funktion in
der loop-Funktion mit folgender Anweisung aufgerufen: s();
void loop () {
s(); // Aufruf der s-Funktion
o();
s();
delay(1000);
}
Die Funktion zur Ausgabe des Buchstaben s ruft ihrerseits die did-Funktion
auf.
Dies geschieht drei mal hintereinander, gefolgt von einer kurzen
Pause:
void s(){
did(); did(); did();
delay(200);
}
Zum Erzeugen des Signals "did" wird also ebenfalls eine Funktion
benutzt:
void did(){
digitalWrite(13,
HIGH); delay(kurz);
digitalWrite(13,
LOW); delay(kurz);
}
übergabe von Werten beim Funktionsaufruf:
Im zweiten Beispiel soll beim Funktionsaufruf ein Zahlenwert
übergeben werden.
Der Aufruf: did(3) trägt
jetzt in seinen Klammern das Argument 3.
Dieser Wert 3 wird im Parameter z der Funktion entgegengenommen:
void did(int z){
...
somit kann der Quellcode verkürzt werden:
int kurz = 150;
int lang = 800;
void setup (){
pinMode(13, OUTPUT); //Board-LED
}
void loop () {
did(3); //s
da(3); //o
did(3); //s
delay(1000);
}
void did(int z){
while( z > 0 ){
digitalWrite(13, HIGH);
delay(kurz);
digitalWrite(13,
LOW); delay(kurz);
z--;
}
}
void da(int z){
while( z > 0){
digitalWrite(13, HIGH);
delay(lang);
digitalWrite(13,
LOW); delay(kurz);
z--;
}
}
Mehr zum SOS-Signal
Wikipedia
schreibt:
Der SOS-Morse-Code, drei kurz,
drei lang, drei kurz (auch als
dididit dahdahdah dididit ausgesprochen), wird nicht, wie oft
angenommen, als drei Einzelbuchstaben gesendet, sondern ohne
Pausen zwischen diesen Buchstaben.
Wie jede Erstaussendung oder unbeantwortete Aussendung ist der
Anruf - hier also SOS - dreimal hintereinander zu funken, um die Sendefrequenz länger zu belegen und damit die
Wahrscheinlichkeit, dass der Code erkannt wird, entsprechend
zu erhöhen.
|