Meist soll ein Programm nicht nur einmal durchlaufen, sondern solange ausgeführt werden, bis ein bestimmtes Ereignis (z. B. Druck auf einen Taster) eintritt. Dazu verwendet man eine while-Schleife mit einer Bedingung, die immer erfüllt ist. Innerhalb der Schleife muss es dann aber eine Möglichkeit geben, dass die Schleife verlassen wird, damit das Programm beendet werden kann.
Programmbeispiel - Entscheidungsabfrage und Reaktion auf einen Taster
Im folgenden Beispiel fährt der Roboter solange vor und zurück bis das Programm durch einen Druck auf den mittleren Taster am EV3 Brick beendet wird.
ACHTUNG: Da ein Schleifendurchlauf aufgrund der beiden Aufrufe der Funktion SLEEP(1000); mindestens 2 Sekunden dauert, muss der Center-Button auch mindestens 2 Sekunden lang gedrückt werden, damit die Bedingung in der if-Abfrage erfüllt ist, wenn diese bei der Ausführung des Programmcodes bzw. eines Schleifendurchlaufs erreicht wird.
#include "evclibrary.h"
int main()
{
// 1. Konfiguration der angeschlossenen Sensoren und Motoren
SET_OUT(OUT_A,OUT_MOTOR);
SET_OUT(OUT_B,OUT_MOTOR);
// 2. Initialisierung des EV3 Brick
EVC_INIT();
// 3. Steuerung des Roboters
while (1==1)
{
WRITE_OUT(OUT_A, MOTOR_POWER, 70);
WRITE_OUT(OUT_B, MOTOR_POWER, 70);
SLEEP(1000);
WRITE_OUT(OUT_A, MOTOR_POWER, -50);
WRITE_OUT(OUT_B, MOTOR_POWER, -50);
SLEEP(1000);
if (READ_BUTTON(BUTTON_CENTER)==1)
{
break;
}
}
// 4. Programmende
EVC_CLOSE();
return 0;
}
Erklärungen zu diesem Programmbeispiel
Zeile 10: while (1==1) ...
In dieser Zeile beginnt eine while-Schleife mit der Bedingung 1==1. Der Programmcode, der zwischen den geschwungenen Klammern steht, wird solange wiederholt ausgeführt, solange die Bedingung erfüllt ist – also „unendlich“ lange bzw. so lange bis der Akku des EV3 Brick leer ist.
Zeile 18: if (READ_BUTTON(BUTTON_CENTER)==1)
Am Ende der Schleife wird mit einer if-Abfrage ermittelt, ob der mittlere Taster am EV3 Brick gedrückt ist. Dazu wird mit der Funktion READ_BUTTON(BUTTON_CENTER) abgefragt, ob der Taster gedrückt wird. Dies ist dann der Fall, wenn diese Funktion den Wert 1 zurückliefert.
Zeile 20: break;
In die Anweisung break bewirkt, dass die Schleife verlassen und die Ausführung des Programms in Zeile 26 fortgesetzt wird.
Die if-Abfrage
Eine if-Abfrage entscheidet über den weiteren Programmablauf. Nach dem Schlüsselwort if wird eine Bedingung angegeben, die darüber entscheidet, ob ein Programmcode ausgeführt werden soll oder nicht. Ist die Bedingung erfüllt, werden alle Anweisungen ausgeführt, die mit geschwungenen Klammern zusammengefasst sind.
if (Bedingung)
{
Anweisung 1;
Anweisung 2;
...
}
Weiter gibt es auch die Möglichkeit einen Block von Anweisungen festzulegen, die ausgeführt werden sollen, wenn die Bedingung nicht erfüllt ist. Diese stehen nach dem Schlüsselwort else.
if (Bedingung)
{
Anweisung 1;
Anweisung 2;
...
}
else
{
Anweisung 1;
Anweisung 2;
...
}
Vergleichsoperatoren für Bedingungen
In einer Bedingung werden zwei oder mehrere Werte miteinander verglichen. Meist soll überprüft werden ob eine Variable einen bestimmten Wert hat. Für diese Überprüfung können in den Bedingungen einer if-Abfrage und einer while-Schleife folgende Operatoren verwendet werden:
if (a==1) {...} | == | ist gleich | Hat die Variable a den Wert 1? |
if (a!=1) {...} | != | ungleich | Ist der Wert der Variable a ungleich 1? |
if (a<4) {...} | < | kleiner | Ist der Wert der Variable a kleiner als 4? |
if (a>20) {...} | > | größer | Ist der Wert der Variable a größer als 20? |
if (a<=10) {...} | <= | kleiner gleich | Ist der Wert der Variable a kleiner gleich 10? |
if (a>=25) {...} | >= | größer gleich | Ist der Wert der Variable a größer gleich 25? |
Verknüpfungsoperatoren für Bedingungen
Sollen in einer Bedingung mehrere Bedingungen verknüpft werden, so gibt es dafür die beiden Operatoren && und || für das logische UND und das logische ODER.
Bei einer Verknüpfung mit && - dem logischen UND - ist die Gesamtbedingung erfüllt, wenn beide Bedingungen erfüllt sind.
Bei einer Verknüpfung mit || - dem logischen ODER - gilt die Gesamtbedingung dann als erfüllt, wenn entweder die eine, die andere oder beide Bedingungen erfüllt sind.
if ((a==1)&&(b!=2)) {...} | Hat die Variable a den Wert 1 UND ist der Wert von b ungleich 2? |
if ((a==1)||(b==1)) {...} | Hat die Variable a den Wert 1 ODER hat die Variable b den Wert 1? |