Benutzer-Werkzeuge

Webseiten-Werkzeuge


Seitenleiste

skript:ifthenelse

If/then/else - Bedingtes Ausführen von Programmteilen

Sehr oft wollen wir eine Handlung nur dann ausführen, wenn eine bestimmte Bedingung zutrifft. So könnte z.B. unser Roboter solange geradeaus fahren, bis er an ein Hindernis stößt, und alternativ ein Ausweichmanöver starten.

Mit der if-Bedingung, die in sehr vielen Programmiersprachen ähnlich funktioniert, haben wir dafür ein geeignetes Werkzeug zur Hand. Sie erlaubt es dem Programm, anhand einer festgelegten Bedingung zwischen zwei alternativen Programmteilen auszuwählen, von denen dann einer ausgeführt wird.

Syntax

In Arduino/C++ sieht eine if-Bedingung grundsätzlich so aus:

if(diese Bedingung erfüllt ist){
  wird dieser Code ausgeführt
}else{
  sonst dieser.
}

Bedingungen als Boolsche Ausdrücke

Wie können wir die Bedingung in den runden Klammern so formulieren, dass der Computer sie versteht?

Das geht mit Hilfe so genannter Boolscher Ausdrücke. Das sind Aussagen, die entweder 1 (Wahr) oder 0 (Falsch) sein können.

So ist z.B. die Aussage $5 > 2$ immer Wahr.

Ein Programm mit dem Code

if(5>2){
  //wird dieser Code ausgeführt
}else{
  //sonst dieser.
}

würde also immer den Code in den ersten geschweiften Klammern ausführen.

Spannender wird es, wenn der Ausdruck in der Bedingung Variablen oder die Ergebnisse von Funktionsaufrufen enthält. So würde z.B. folgendes Programm

if(i>10){
  Serial.println("i ist groß");
}else{
  Serial.println("i ist klein");
}

immer genau dann „i ist groß“ ausgeben, wenn der Wert der Variable i zum Zeitpunkt der Überprüfung größer als 10 ist.

Um komplexere Probleme zu lösen, können mehrere Teilausdrücke mit logischen Verknüfungen wie „und“ (&&) oder „oder“ (||)verbunden werden:

if(i>=10&&i<=20){
  Serial.println("i liegt zwischen 10 und 20");
}else{
  Serial.println("i liegt außerhalb des Bereichs 10-20");
}

Weitere Informationen bekommt ihr hier: http://arduino.cc/en/Reference/Boolean

Beispielcode Dämmerungsschalter

Eine Lampe, die sich in der Nacht von selbst anschaltet („Dämmerungsschalter“) könnte also z.B. so programmiert werden:

if(analogRead(sensorPin)>dunkelSchwelle){
  digitalWrite(lampenPin,LOW); // die gemessene Lichtintensität liegt ÜBER der Schwelle, also mache das Licht AUS.
}else{
  digitalWrite(lampenPin,HIGH); // die gemessene Lichtintensität liegt UNTER der Schwelle, also mache das Licht AN.
}

Ein Beispiel für die Verwendung von if/then/else: Ein virtuelle Eieruhr

Durch Kombination von mehreren if-statements lässt sich eine Eieruhr verwirklichen:

int knopfPin=2; //mit dem Knopf an Pin 2 wollen wir den Wecker neu starten können.
int sekundenVergangen=0; //hier merken wir uns, wie lange die Uhr schon läuft
int endZeit=5;// so lange wollen wir warten
void setup(){
    Serial.begin(9600);
    pinMode(knopfPin,INPUT_PULLUP);
}
void loop(){
  // gib nach genau endZeit sekunden Alarm.
  if (sekundenVergangen>=endZeit){
    Serial.println ("Klingeling!");
    sekundenVergangen=sekundenVergangen+1; // sorge dafür, dass es nicht nochmal klingelt
  }else{
    Serial.println(endZeitsekundenVergangen);   // zeige die verbleibenden Sekunden an, solange die Uhr läuft
    sekundenVergangen=sekundenVergangen+1; // zähle die Sekunden.
    delay(1000);      //warte eine sekunde.
  }
  //stelle die Uhr mit dem Knopf zurück. Wegen INPUT_PULLUP ist der Pin LOW, wenn der Knopf gedrückt ist.
  if(digitalRead(knopfPin)==LOW){
    sekundenVergangen=0;
  }
} 

Weiter Informationen bekommt ihr auch hier: http://arduino.cc/en/Tutorial/IfStatement

skript/ifthenelse.txt · Zuletzt geändert: 2018/04/27 20:38 von d.golovko