Die if-Bedingung und boolsche Operationen

Veröffentlicht von

Inhalte

  • Die if -Bedingung als wichtiges Programmier-Konstrukt
  • Der else -Block
  • Boolsche Variablen
  • Vergleichsoperatoren ==  und !=
  • Boolsche Operatoren: !  (NOT), &&  (AND), ||  (inklusives OR)

Einführung

Ein Großteil der Computerprogramme beinhaltet irgendeine Art an Interaktion, um dynamsich auf sich verändernde Gegebenheiten zu reagieren.

Ein simples Beispiel wäre eine Fernseh-Fernbedienung: Diese schickt einen Befehl an den Fernseher, wenn ein Knopf auf ihr gedrückt wird. Wird kein Knopf gedrückt, dann wird kein Befehl ausgeführt. Es handelt sich also um eine Prüfung nach dem Prinzip: Wenn …  -> Dann …

Die if-Bedingung

Dieses Konstrukt „Wenn etwas bestimmtes passiert, Dann führe etwas aus“ existiert in fast allen Programmiersprachen. Im Arduino C-Code sieht dieses Konstrukt wiefolgt aus.

Die auf die Anweisung if folgt eine Klammer, in der ein Ausdruck steht, der entweder true oder false annehmen kann. In diesem Beispiel steht BUTTON_IS_PRESSED  für den Zustand eines Tasters, der entweder gedrückt ist ( true ), oder nicht ( false ). Nur dann, wenn dieser Ausdruck true  ist, dann wird der folgende Befehl send_command();  ausgeführt. Andernfalls wird er ignoriert und das Programm überspringt den Code der if -Bedingung.

Beispiel 1

Wir verwenden hierzu den Aufbau aus dem Abschnitt Input-Buttons. Laden sie hierzu folgenden Code auf das Arduino:

Immer dann, nun der Taster gedrückt wird, blinkt die LED dreimal kurz auf.

Analyse des Codes:

In Zeile 1 wird eine Variable vom Typ boolean  angelegt. Dieser Variablentyp kann nur die zwei Werte 0 (entspricht false ) oder 1 (entspricht true ) aufnehmen. Andere Werte sind nicht erlaubt.

In Zeile 9 wird der Zustand an Pin 6 ausgelesen. Dieser ist entweder LOW  oder HIGH , wobei diese Zustände auch den Werten 0 oder 1 entsprechen. Das Resultat dieser Ausleseoperation kann daher in der Variable buttonState  gespeichert werden.

In Zeile 11 wird mittels der if Bedingung geprüft, ob  buttonState  true  oder false  ist. Nur wenn der Ausdruck wahr ist, wird der folgende Block in den geschwungenen Klammern ausgeführt. Wenn nicht, wird er ignoriert.

Die Else-Bedingung

Erweitert werden kann die if  Bedingung mit einem else -Block. Dieser wird immer dann ausgeführt, wenn die if-Bedingung nicht true  ist.

Beispiel 2

Wir ersetzen die if-Bedingung aus Experiment 1 mit folgendem Code:

Analyse des Codes

Der else -Block dient also als Alternative zu den Anweisungen, die auf die if-Bedingung folgen.  In diesem Fall blinkt die LED nur einmal kurz auf.

Die Vergleichsoperatoren ==  und !=

Um zu überprüfen, ob eine Bedingung TRUE oder FALSE ist, kann man auch einen expliziten Vergleich machen

Das doppelte istgleich-Zeichen == entspricht einem Vergleich und lässt sich in etwa so lesen: „Ist er Ausdruck links von ==  gleich dem Ausdruck rechts von == ? Falls ja, so ist der Gesamte Ausdruck true. Falls nicht, so ist der gesamte Ausdruck false.“ Dieser Ausdruck evaluiert also nur dann zu true, wenn auch buttonState  true ist.

Das Gegenteil lässt sich auch überprüfen:

buttonState != true

In diesem Fall wird mit dem !=  Zeichen überprüft, ob der linke und der rechte Teil nicht gleich sind. Der Gesamtausdruck wird also nur dann true, wenn beide Teile verschiedene Zustände haben.

Beispiel 3

Beispiel 2 wird nun so modifiziert, dass ein Knopfdruck die genau gegenteilige Wirkung erzielt. Es reicht dabei genau eine Zeile der if -Bedingung zu modifizieren.

Das gleiche Resultat bewirkt der Ausdruck

In diesem Fall evaluiert der Gesamtausdruck nur dann zu true , wenn buttonState  den Zustand false  hat.

Modifizieren Sie nun ihren Code so, dass ihr Beispiel aus Beispiel 1 genau die gegenteilige Wirkung erzielt und probieren Sie dies praktisch aus.

Boolsche Operationen: !  (NOT)

Boolsche Variablen können nur zwei Zustände einnehmen: true (entspricht 1) oder false (entspricht 0).

Um einen Zustand in sein Gegenteil umzuwandeln, wird der  !  (NOT) Operator verwendet. Sinnvollen Einsatz findet er zum Beispiel beim Taster-Beispiel aus dem Experiment mit den PullUp-Widerständen. Bei Anwendung eines PullUps liegt am Sensor immer dann HIGH (= 1, entspricht auch true ) an, solange der Taster nicht gedrückt ist. Dies ist unintuitiv. Meistens wollen dann true  auslesen, wenn der Taster gedrückt ist. Der !  Operator schafft Abhilfe, indem er den boolschen Wert invertiert.

Beispiel 4

Bauen Sie das Experiment mit einem Taster und einer LED auf. Der Taster liegt an Pin 6 an, die LED an Pin 13.

Code-Analyse

In Zeile 11 wird bei das Ergebnis des Auslesens gleich mit dem !  Operator invertiert ( !digitalRead(6) ). Das umgedrehte Ergebnis repräsentiert nun den Tastendruck. Die LED leuchtet nun immer dann auf, wenn die Taste gedrückt wird.

Boolsche Operationen: &&  (AND) und ||  (inklusives OR)

Sollen mehrere boolsche Variablen oder Zustände miteinander verknüpft werden, kann man auf boolsche Operationen zurückgreifen.

Beispiel 5

Erweitern Sie Beispiel 4 um einen zweiten Taster, der an Pin 7 (konfiguriert mit PullUp) anliegt. Eine zweite LED, anliegend an Pin 12 wird ebenso hinzugefügt.

In diesem Experiment soll LED13 nur dann zum Leuchten bringen, wenn beide Taster gedrückt sind. LED12 soll dann leuchten, wenn mindestens einer der beiden Taster gedrückt wird (egal welcher).

Code Analyse:

Nach dem Auslesen der Zustände der Pins (samt Invertierung) wird in Zeile 19 überprüft, ob sowohl state6  als auch state7  den Wert 1, also true  haben (Dies geschieht mit dem &&  Operator). Nur dann wenn dies für beide zutrifft, wird der Gesamtausdruck true  und die LED13 aktiviert.

In Zeile 24 wird mit dem ||  Operator geprüft, ob mindestens einer der beiden Zustände state6  oder state7  den Wert 1 haben, also true  ist. Wenn einer der beiden oder beide true  sind, wird LED12 aktiviert.
Das Zeichen |  (genannt Pipe) kann auf Windows-Computern mit der Tastenkombination ALTGR  + <  erzeugt werden. Auf Apple Computern kommt die Kombination ALT + SHIFT  + 7  zum Einsatz.

Zusammenfassung

if -Bedingungen werden dazu verwendet um Verzweigungen im Programmcode zu ermöglichen. Hierbei wird überprüft, ob ein Ausdruck zu true  evaluiert. Nur dann werden die auf die Bedingung folgenden Befehle ausgeführt. Als Alternative lässt sich (bei Bedarf) auch ein else -Zweig definieren, der nur dann ausgeführt wird, wenn die if -Bedingung nicht erfüllt wird.

Boolsche Variablen können nur die Werte 0 ( false) oder 1 ( true) annehmen.

Die boolschen Vergleichsoperatoren ==  und !=  prüfen, ob zwei Werte gleich sind oder ungleich sind.

Die Boolsche Operation !  invertiert einen boolschen Wert.

Die Boolsche Operation &&  (AND) verknüpft zwei Boolsche Werte. Der Gesamtausdruck ergibt nur dann TRUE, wenn beide Teile des Ausdrucks true  sind.

Die Boolsche Operation ||  (inklusive OR) verknüpft zwei boolsche Werte. Der Gesamtausdruck ergibt nur dann true , wenn zumindest ein Teil des Ausdrucks true  ist.

Aufgaben

  • (Bauen Sie folgende Schaltung mit zwei Tastern und 5 LEDs auf)
  • [SCHALTUNGSDIAGRAMM]
  • LED1 gibt den Zustand von Taster 1 aus
  • LED2 gibt den inversen Zustand von Taster 1 aus
  • LED3 gibt den Zustand von Taster 1 && Taster 2 aus
  • LED4 gibt den Zustand von Taster 1 || Taster 2 aus
  • LED5 leuchtet nur dann auf, wenn Taster 1 und Taster 2 nicht gleich sind

Weiterführende Links

  • https://www.arduino.cc/en/Reference/If
  • https://www.arduino.cc/en/Reference/Boolean

2 Kommentare

  1. Sollte bei Beispiel 1 nicht vor digitalRead ein ! sein also !digitalRead? Ansonsten blinkt die LED ja laufend und wird nur durch den Taster unterbrochen.

Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.