# Z-Lab Arduino-Grundkurs Übung 6: Ein Schalter (ein digitaler Sensor)

In dieser Übung verwenden wir einen Schalter.

Zuerst öffnen wir die Übung über den gewohnten Weg. Der Name ist "06_Schalter"

![Übung öffnen](oeffnen.png)

## Verkabeln wir den Piepser mit dem Arduino mit dem Arduino

So muss da aussehen, wenn wir fertig sind:

<img src="06_Schalter.svg">

So und dann geht's wieder ans Programmieren.

In der Datei 06_Schalter.ino finden wir (ohne die ganzen Kommentare) folgenden Quellcode:

```c
const int buttonPin = 12;
const int ledPin = 13;

int buttonState = 0;

void setup() {
  pinMode(ledPin, OUTPUT);
  pinMode(buttonPin, INPUT);
}

void loop() {
  buttonState = digitalRead(buttonPin);

  if (buttonState == HIGH) {
    digitalWrite(ledPin, HIGH);
  } else {
    digitalWrite(ledPin, LOW);
  }
}
```

Auch hier hast du das meiste schon gesehen.  
Wir haben hier aber unsere erste sogenannte Kontrollstruktur.  
Kontrollstrukturen sorgen dafür, dass Programme unter bestimmten Bedingungen nur bestimmte Dinge machen oder oder nicht machen.  
Wir erklären das gleich ganz genau :)

## digitalRead()

```c
buttonState = digitalRead(buttonPin);
```

Die Funktion digitalRead() liest einen digitalen Sensor aus.  
Ein Schalter wie in unserem Beispiel gibt nur die 0 zurück, wenn er nicht gedrückt ist oder gibt die 1 zurück, wenn er gedrückt ist.  
Dazwischen gibt es nicht.  
Damit wir gleich wissen, ob der Knopf gedrückt ist oder nicht speichern wir das Ergebnis in der Variable "buttonState" ab, also Schalterstatus.

## if else (und elseif)

Jetzt verwenden wir die Variable "buttonState" und schauchen, ob der Knopf gedrückt ist.  
Dazu gibt es if, else und (wird hier nicht verwendet elseif):


```c
  if (buttonState == HIGH) {
    digitalWrite(ledPin, HIGH);
  } else {
    digitalWrite(ledPin, LOW);
  }
}
```

"if" heißt "wenn". Wenn also der buttonStage "HIGH" wie "an" ist dann soll das gemacht werden, was zwischen den geschwungenen Klammern steht, also die LED soll eingeschaltet werden.  
"else", also "ansonsten" soll das gemacht werden, was in der zweiten Klammer steht.  
Es gibt auch noch "elseif", das heißt so viel wie "ansonsten wenn".  

Um Dinge zu vergleichen gibt es viele verschiedene Möglichkeiten, sogenannte Operatoren.  
Mit diesen kannst du z.B. schauen, ob irgendwas gleich, ungleich, größer oder kleiner als etwas anderes ist.  
Hier sind ein paar dieser Operatoren: 
* "==" prüft, ob etwas gleich ist
* "!=" prüft, ob etwas ungleich ist
* "<" prüft, ob der Wert links kleiner ist als der Wert rechts
* ">" prüft, ob der Wert links größer ist als der Wert rechts
* "<=" prüft, ob der Wert links kleiner oder gleich dem Wert rechts ist
* ">=" prüft, ob der Wert links größer oder gleich dem Wert rechts ist


## Und wie könnte es weiter gehen?
* Kannst du das Programm auch so abändern, dass die LED 5 Sekunden an bleibt, wenn der Knopf gedrückt wird?
<details>
  <summary>Hier klicken für Lösungsvorschläge - aber bitte erst selbst probieren! </summary>

  ```c
    if (buttonState == HIGH) {
      digitalWrite(ledPin, HIGH);
        delay(5000);
      } else {
        digitalWrite(ledPin, LOW);
      }
    }
  ```
</details>
