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.