Verzweigungen


Bastelseite Display + Antriebe Sensoren C++


if (...; ...; ...) { Anweisung }

In Verbindung mit einem Vergleichsoperator prüft "if" ob eine bestimmte Bedingung erfüllt ist for (int n = 1; n < 20; n++) {} .

Hierfür gilt:
for (Initialisierung; Bedingung; Schrittweite)
{
// Anweisung(en);
}

Bei der Initialisierung wird neben der Variable gleichzeitig der Startwert festgelegt: int n = 1;
Die Schleife läuft solange bis die Bedingung erreicht ist: n < 20; . Dies bedeutet, laufe solange n kleiner 20 ist.
Schrittweite ist auch das Inkrement (++) und das Dekrement (--). Für n = n+ 1 wird unter C+ geschrieben: n++ .
Nimmt man als Startwert z.B. "int n = 500" und setzt die Bedingung auf "n > 20" kann auch die Schrittweite "n = n-7" versucht werden.
So wird von 500 schrittweise um 7 vermindert, bis die Bedingung, "n" größer als 20, nicht mehr zutrifft.


Betrachten wir erst einmal unsere Schleife mit for (int n = 1; n < 20; n++) . Diese Schleife startet bei "1" und wird wiederholt bis "n < 20". Das heißt, also solange bis n nicht mehr kleiner als 20 ist. Dies trifft nach der 19.ten Schleife zu. Der Sketch verläßt die for-Schleife und startet erneut bei "loop".

Der Sketch dazu:


void setup() {
  Serial.begin(9600);
}

void loop() {
  Serial.println("Start: ");
  for (int n = 1; n < 20; n++)
  {
    Serial.print("Schleife Nummer: ");
    Serial.println(n);
    delay(2000);
  }
}

Im Seriellen Monitor:

Start:
Schleife Nummer: 1
Schleife Nummer: 2
Schleife Nummer: 3
Schleife Nummer: 4
.....
Schleife Nummer: 16
Schleife Nummer: 17
Schleife Nummer: 18
Schleife Nummer: 19
Start:
Schleife Nummer: 1
Schleife Nummer: 2
...

Nach Start des Seriellen Monitors kann die Ausgabe wie rechts oben im Bild betrachtet werden. Nach jeder Schleife wird kurz (2 Sekunden) eine Pause eingelegt.
Bei jedem neuen Start von "loop" erscheint: "Start:" am nächsten Anfang zur Kontrolle.



Funktion 2 mit Übergabe von Werten

Interessanterweise lassen sich auch noch Werte an die Funktion übergeben: void ledlicht (5, 2000, 1000); . Nennen wir die neue Funktion einfach "ledlicht". In den Klammern stehen nun ein paar Zahlen, die Werte darstellen. Achtung: es können nur die Werte selbst, nicht die Variablennamen weitergegeben werden!
Die erste Zahl ist "5" = der Pin der LED. "2000" als zweiter Wert soll die Einschaltzeit bestimmen, sowie "1000" die Ausschaltzeit.

void ledlicht(int ledPin, int einzeit, int auszeit) {
digitalWrite(ledPin, HIGH);
delay(einzeit);
digitalWrite(ledPin, LOW);
delay(auszeit);
}

Jetzt schaltet die Funktion den "ledPin" des Ausgangs auf "HIGH" und nach der Zeitangabe von "einzeit" wieder auf "LOW". Nun wird die "auszeit" noch abgewartet um wieder zurück zukehren.

Der große Vorteil ist jetzt die variable Eingabe: es können von verschiedenen Punkten des Sketches die Funktion mit unterschiedlichen Werten aufgerufen werden.
Es lassen sich sogar andere LEDs, als Beispiel die LEDs an Pin 7 oder 9, schalten: void ledblink2 (7, 1000, 5000); oder void ledblink2 (9, 500, 500);


Funktion 3 mit Rückgabe vom Wert

Genauso gut läßt sich eine Variable zurück geben. Der Unterschied ist nun der Name: "float".
Der Funktionsname "quadratur" ist nun auch der Name der zurückgebenden Variable. "y" ist noch der übergebende Wert.

float quadratur (float y) {
float ergebnis = y*y;
return ergebnis;
}

Das Ganze wird nun mit wertneu = quadratur(7); aufgerufen. "quadratur" ruft die "float"-Funktion auf und übergibt den Wert "7" an "y".
jetzt wird das "ergebnis" aus der Multiplikation von "y" mit "y" selbst erstellt und mittels "return" zurück gegeben.
Da "quadratur(7)" als Aufruf galt und gleichgestellt ist mit "wertneu" wird es an diesen weitergegeben = "wertneu" ist nun "49"!



brixelweb.de