Aus dem Kurs: IoT-Grundlagen für Entwickler:innen – Elektronik-Basiswissen

DigitalRead-Beispiel

In dem Blink-Beispiel haben Sie gesehen, wie Sie mit Digital Write einen Wert an einem Pin schreiben. In diesem Beispiel werden wir einen digitalen Wert lesen und diesen ausgeben. Hierzu verwenden wir einen Chamber als Schalter und LED als Ausgabe. Ich werde Ihnen zeigen, wie sich der Arduino verhält, wenn ein PIN in einem undefinierten Zustand ist und welche Möglichkeiten es gibt, um den Pin in einen definierten Zustand zu bringen. Zunächst passe ich den Code an. Dazu verwende ich den bestehenden Code aus dem Blink-Beispiel. In der Setup-Methode setze ich Pin 2 als Eingabe pinMode Pin 2 INPUT. In der Loop-Methode lesen wir den Wert von Pin 2 int button = digitalRead und Pin 2 und setzen mit diesem Wert die LED anstelle von HIGH verwende ich button. Den Rest benötigen wir nicht mehr. Überprüfen Sie den Code und laden Sie ihn anschließend hoch. Nachdem der neue Code auf dem Arduino ist, passen wir unsere Schaltung aus dem Blink-Beispiel an. Pin 13 bleibt noch immer mit der LED und dem Widerstand verbunden. In Pin 2 stecke ich einen Champer. Dieser dient als Schalter. Um nun die LED zum Leuchten zu bringen, stecke ich das andere Ende in die 5-Volt-Reihe. Sollten Sie diese noch nicht verbunden haben, dann verbinden Sie diese mit dem 5 Volt Pin des Arduino. Stecken Sie nun den Chamber von Pin 2 in die Groundreihe. Die LED leuchtet nicht mehr. Die digitalRead-Methode liest LOW und setzt die LED ebenfalls auf LOW. Zuvor war der Chamber in 5 Volt, die digitalRead-Methode hat HIGH gelesen und die LED hat auch geleuchtet. Was passiert, wenn der Chamber gar nicht verbunden ist oder nur kurz mit 5 Volt berührt wird? Die LED leuchtet, sobald ich aber mit dem Finger in den Chamber komme, nicht mehr. Der Zustand ist undefiniert, da der Pin weder HIGH oder LOW gesetzt ist. Wie wir später sehen werden, hängt dies mit der TTL-Logik zusammen. Um einen definierten Zustand zu erreichen, wenn der Pin offen ist, können Sie per Software den Pin in einen Default-Zustand setzen. Hierzu wechsle ich in die Arduino IDE und ändere beim Pin 2 den INPUT-Wert auf INPUT_PULLUP. Dadurch wird innerhalb des Arduino der Pin mit einem PULLUP-Widerstand verbunden, d.h., ein Pin ist ein Widerstand, der mit HIGH verbunden ist und somit einen definierten Zustand hat. Wird der Pin in der Schaltung auf LOW verbunden, ändert sich der Zustand auch auf LOW. Ich werde gleich noch ein Beispiel mit einem PULLDOWN-Widerstand zeigen und später beim Spannungsteiler etwas detaillierter eingehen. Laden Sie die Änderung auf den Arduino. Wenn wir nun die LED betrachten, dann leuchtet diese, obwohl der Pin 2 noch immer offen ist. Verbinden wir ihn mit Ground, leuchtet die LED nicht mehr. Ziehen wir den Chamber raus, leuchtet sie wieder. Ebenso, wenn wir ihn in 5 Volt stecken. Mit der INPUT PULLUP-Definition setzen Sie den Pin per Software in einen definierten Zustand, wenn dieser offen ist, in diesem Fall auf HIGH. Der Arduino bietet aber keine Möglichkeit, diesen standardmäßig auf LOW zu setzen. Einen INPUT PULLDOWN kennt er nicht. Dies können Sie mit einem Widerstand und Chamber realisieren. Ändern Sie zunächst in der IDE den INPUT PULLUP-Wert zurück zu Input und laden Sie das Programm hoch. Die LED leuchtet zwar, der Pin 2 ist jedoch wieder in einem undefinierten Zustand. Als PULLDOWN-Widerstand verwendet man einen hochohmigen Widerstand. Ich nehme einen 100 Kilo Ohm Widerstand, die Farben Braun, Schwarz, Schwarz, Orange und Braun. Den Widerstand verbinde ich auf einer Seite mit Ground und die andere Seite mit einer freien Stelle auf dem Breadboard. In dieselbe Reihe stecke ich den Chamber vom Pin 2. Damit hat der Pin einen definierten Zustand und die LED geht aus. Ein zusätzlicher Chamber ist nun unser Schalter. Die LED bleibt noch immer aus, auch wenn ich den Chamber berühre. Erst wenn ich ihn mit 5 Volt verbinde, geht die LED an. Und wenn ich den Chamber rausziehe, geht die LED sofort aus. Bei Ground bleibt sie natürlich auch aus. Damit haben Sie zwei Möglichkeiten gesehen, einen Pin in einen definierten Zustand zu setzen, d.h., mit Software oder klassisch mit einem PULLDOWN-Widerstand.

Inhalt