104 lines
3.2 KiB
Markdown
104 lines
3.2 KiB
Markdown
|
TODO: Überarbeiten
|
||
|
|
||
|
# Z-Lab Arduino-Grundkurs Übung 6: Ein Schalter (ein digitaler Sensor)
|
||
|
|
||
|
In dieser Übung verwenden wir einen Schalter.
|
||
|
|
||
|
Zuerst öffnen wir das Projekt über den gewohnten Weg. Der Name ist "05_Schalter"
|
||
|
|
||
|
![Projekt öffnen](projekt_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>
|