Antennen-Endschalter


Google-Suche auf MEINE-SCHALTUNG.de :





Dauerkalender


Arduino - Unterprogramme

Eine große Programmierungshilfe stellen die Unterprogramme dar. Treten in einem Sketch Programmteile auf, die sich mehrmals wiederholen, ist es sinnvoll, diese zusammenzufassen und auszulagern. Dadurch gewinnt ein Hauptprogramm an Einfachheit und Übersicht. Zusätzlich wird der Speicher für den Programmcode gespart. Ein ganz großer Vorteil eines Unterprogramms stellt seine Wiederverwendbarkeit dar. Daher ist es sinnvoll, für umfangreichere Unterprogramme eine solide Dokumentation zu erstellen. Unterprogramme werden in anderen Programmierungssprachen breit verwendet und werden unterschiedlich benannt. Man trifft auf Bezeichnungen wie Prozedur, Funktion, Routine, Subroutine, Methode, Modul u.a.. Unterprogramme werden mit einem Befehl aufgerufen. Grundsätzlich besteht die Möglichkeit, an ein Unterprogramm diverse Variablen zu übergeben, mit denen das Unterprogramm arbeiten kann. Des Weiteren ist es möglich, berechnete Werte von einem Unterprogramm zurückzuholen.

Beispiel ohne Rückgabe:


  // ----------------------------------------------------------
  // Unterprogramm "Diode" ohne Rückgabewerte


  int LedPin [] = { 10, 11, 12 };
  int TasterPin [] = { 42, 43, 44 };
  int i;

  void setup() {
    for (i=0; i<3; i++) {
      pinMode (LedPin [i], OUTPUT);
      pinMode (TasterPin [i], INPUT_PULLUP);
    }
  }

  void loop() {
    for (i=0; i<3; i++) {
      if (digitalRead (TasterPin [i]) == HIGH) {
        Diode (LedPin [i], 0);
      }
    }
    if (digitalRead (TasterPin [0]) == LOW) {
      Diode (LedPin [0], 25);
    }
    if (digitalRead(TasterPin [1]) == LOW) {
      Diode (LedPin [1], 150);
    }
    if (digitalRead(TasterPin [2]) == LOW) {
      Diode (LedPin [2], 250);
    }
  }

  void Diode ( int PinNr, int Wert ) {
    analogWrite(PinNr, Wert);
  }

  // ----------------------------------------------------------

Die Aufgabe des Hauptprogramms ist es, beim Betätigen eines Schalters jeweils eine Leuchtdiode mit unterschiedlicher Helligkeit einzuschalten. In zwei Arrays benennen wir zunächst die PWM-Pins, an die wir die Dioden (mit Vorwiderstand) anschließen wollen und die Pins, an die unsere Schalter angeschlossen werden. In void setup() deklarieren wir die Pins entsprechend als Aus- und Eingänge. In void loop() schalten wir zunächst die Dioden aus, deren zuständige Schalter nicht betätigt sind. Mit If-Abfragen untersuchen wir anschließend, ob ein Schalter betätigt wurde. Sobald das der Fall ist, wird eine Diode mit einer festgelegten Helligkeit eingeschaltet. In beiden Fällen, Diode Aus und Diode Ein, rufen wir das Unterprogramm "Diode" auf.
Das Ein- und Ausschalten der Dioden wird also mit dem Unterprogramm "Diode" erledigt. Den Namen eines Unterprogramms können wir frei wählen. Die Struktur von "Diode" ähnelt der von void setup() und void loop(). Damit unser Unterprogramm weißt, welche Diode mit welcher Helligkeit eingeschaltet werden soll, übergeben wir an das Unterprogramm "Diode" zwei Variablen. Es sind PinNr und Wert. Es ist nicht zwingend notwendig, Variablen an ein Unterprogramm zu übergeben. In diesem Beispiel schreibt das Unterprogramm die übergegebenen Variablen in die Anweisung analogWrite() ein und führt sie aus.

Beispiel mit Rückgabe:

Es ist möglich, ein Unterprogramm z.B. eine mathematische Berechnung durchführen zu lassen und sich das Ergebnis anschließend zurückzuholen. Das zweite Beispiel wurde, um diese Eigenschaft zu verdeutlichen, etwas erweitert. Wir wollen jetzt zusätzlich, nachdem der erste Schalter betätigt wurde, auf dem seriellen Monitor sehen, mit welcher Helligkeit, ausgedrückt in %, die erste Leuchtdiode leuchtet. In dem Unterprogramm "Diode" wird die entsprechende Berechnung durchgeführt. Dazu definieren wir eine neue Integer Variable "Prozent". Jetzt heißt es: int Prozent = Wert * 100 / 255;. Das Ergebnis der Operation können wir dann durch Aufruf von "Diode" erfahren. Mit int Diode (int PinNr, int Wert) deklarieren wir den Typ des Ergebnisses. Der Aufruf von "Diode" erfolgt jetzt mit int x = Diode (LedPin [0], 25);. In der hier definierten Variable x ist das Ergebnis (Rückgabewert der Funktion) versteckt und kann weiter verwendet werden.


  // ----------------------------------------------------------
  // Unterprogramm "Diode" mit Rückgabewert


  int LedPin [] = { 10, 11, 12 };
  int TasterPin [] = { 42, 43, 44 };
  int i;

  void setup() {
    Serial.begin(9600);
    for (i=0; i<3; i++) {
      pinMode (LedPin [i], OUTPUT);
      pinMode (TasterPin [i], INPUT_PULLUP);
    }
  }

  void loop() {
    for (i=0; i<3; i++) {
      if (digitalRead (TasterPin [i]) == HIGH) {
        Diode (LedPin [i], 0);
      }
    }
    if (digitalRead (TasterPin [0]) == LOW) {
      int x = Diode (LedPin [0], 25);
      Serial.print ("Die Helligkeit der ersten Diode in % beträgt: ");
      Serial.println (x);
    }
    if (digitalRead(TasterPin [1]) == LOW) {
      Diode (LedPin [1], 150);
    }
    if (digitalRead(TasterPin [2]) == LOW) {
      Diode (LedPin [2], 250);
    }
  }

  int Diode ( int PinNr, int Wert ) {
    analogWrite(PinNr, Wert);
    int Prozent = Wert * 100 / 255;
    return Prozent;
  }

  // ----------------------------------------------------------


Arduino_Programmierung




Google-Suche auf MEINE-SCHALTUNG.de :


Experimentierplatine Hartpapier

Home Impressum Datenschutz