Beschreibung
Konstanten sind vordefinierte Ausdrücke der Arduinosprache. Sie werden benutzt, um Programmcode leichter lesbar zu machen. Die Konstanten könnein Gruppen unterteilt werden:
Logische Level: true und false (Booleankonstanten)
Um Wahr- und Falschwerte darzustellen, sind in der Arduinosprache 2 Konstanten definiert: true
und false
.
false
false
ist die einfacher zu definierende Konstante. false
ist 0 (Null).
true
Häufig wird behauptet, dass true
als 1 definiert ist. Das ist zwar richtig, allerdings hat true
eine weiterreichende Definition.
Jeder Integer, der nicht 0 (Null) ist, ist true
im Booleanzusammenhang. D.h. -1, -2 und -200 sind auch true
.
true
und false
werden im Gegensatz zu HIGH
, LOW
, INPUT
, und OUTPUT
klein geschrieben.
Pinlevel: HIGH und LOW
Wenn von einem Digitalpin gelesen oder auf einen Digitalpin geschrieben wird, gibt es nur 2 Möglichkeiten: HIGH
und LOW
.
HIGH
Die Bedeutung von HIGH
(In Bezug auf den Pin) ist unterschiedlich, je nachdem, ob der Pin als INPUT
oder OUTPUT
definiert ist.
Wenn ein Pin als INPUT
mit pinMode()
definiert wird und mit
digitalRead()
gelesen wird, gibt der Arduino (ATmega) HIGH
zurück, wenn:
-
eine Spannung größer als 3,0V an dem Pin anliegt (5V-Boards)
-
eine Spannung größer als 2,0V an dem Pin anliegt (3,3V-Boards)
Ein Pin kann mit pinMode()
auch als INPUT
definiert werden und mit
digitalWrite()
auf HIGH
gesetzt werden. Das aktiviert den internen 20K-Pullup-Widerstand,
welcher den Inputpin auf HIGH
zieht, bis dieser von extern wieder auf LOW
gesetzt wird. So funktioniert auch INPUT_PULLUP
. Die genaue
Definition davon findest du weiter unten.
Wenn ein Pin mit pinMode()
als OUTPUT
definiert wird und mit
digitalWrite()
auf HIGH
gesetzt wird, liegen an dem Pin:
-
5V an (5V-Boards)
-
3,3V an (3,3V-Boards)
In diesem Zustand kann z.B. eine LED angeschaltet werden, die über einen Vorschaltwiderstand auf Masse verbunden ist.
LOW
Die Bedeutung von LOW
(In Bezug auf den Pin) ist ebenfalls unterschiedlich, je nachdem, ob der Pin als INPUT
oder OUTPUT
definiert ist.
Wenn ein Pin als INPUT
mit pinMode()
definiert wird und mit
digitalRead()
gelesen wird, gibt der Arduino (ATmega) LOW
zurück, wenn:
-
eine Spannung kleiner als 1,5V an dem Pin anliegt (5V-Boards)
-
eine Spannung kleiner als 1,0V (circa) an dem Pin anliegt (3,3V-Boards)
Wenn ein Pin mit pinMode()
als OUTPUT
definiert wird und mit
digitalWrite()
auf LOW
gesetzt wird, liegen an ihm 0V an (Auf 5V- und 3,3V-Boards).
In diesem Zustand kann z.B. eine LED ausgeschaltet werden, die über einen Vorschaltwiderstand auf Masse verbunden ist.
Digitale Pinmodi: INPUT, INPUT_PULLUP, und OUTPUT
Digitalpins können als INPUT
, INPUT_PULLUP
, oder OUTPUT
genutzt werden. Wenn ein Pin mit pinMode()
auf einen anderen Modus umgeschalten wird, ändert sich dessen elektrisches Verhalten.
INPUT
Arduino (ATmega)-Pins, die mit pinMode()
als INPUT
definiert werden, sind in einem hochohmigen Zustand.
Inputpins stellen sehr geringe Zusatzanforderungen an die Schaltung, die sie benutzen. Lediglich ein Vorschaltwiderstand von 100MOhm vor dem Pin ist nötig.
Das macht sie sehr nützlich, um Sensoren auszulesen.
Wenn ein Pin als INPUT
definiert ist und einen Schalter einliest, wird der Inputpin unvorhersehbare Ergebnisse liefern, wenn der Schalter offen ist.
Um ein korrektes Einlesen zu garantieren, wenn der Schalter offen ist, muss ein Pullup- oder Pulldown-Widerstand benutzt werden. Der Sinn davon ist es,
den Schalter auf einen validen Zustand zu ziehen, wenn er offen ist. Üblicherweise wird dazu ein 10KOhm-Widerstand verwendet, da dieser klein genug ist,
um die schwankenden Messwerte zu verhindern und zusätzlich groß genug, um nicht zu viel Spannung auf die Schaltung zu schicken, wenn der Schalter geschlossen
wird. Siehe auch das Digital Read Serial-Tutorial für weitere Informationen.
Wenn ein Pulldown-Widerstand benutzt wird, ist der Zustand des Schalters LOW
, wenn der Schalter offen ist und HIGH
, wenn der Schalter geschlossen ist.
Wenn ein Pullup-Widerstand benutzt wird, ist der Zustand des Schalters HIGH
, wenn der Schalter offen ist und LOW
, wenn der Schalter geschlossen ist.
INPUT_PULLUP
Der ATmega-Mikrocontroller auf dem Arduino hat interne Pullup-Widerstände, auf die zugegriffen werden kann. Wenn du diese statt externen Pullup-Widerstände
verwenden möchtest, kannst du pinMode()
mit der Konstante INPUT_PULLUP
als Argument verwenden.
Siehe auch das Input Pullup Serial-Tutorial für weitere Informationen.
Pins, die als INPUT
oder INPUT_PULLUP
definiert sind, können beschädigt oder zerstört werden, wenn diese Spannungen ausgesetzt werden, die negativ sind
oder über der maximalen Spannungsversorgung des Mikrocontrollers liegen (5V oder 3,3V).
OUTPUT
Pins, die mit pinMode()
als OUTPUT
definiert werden, sind in einem niederohmigen Zustand. Das bedeutet, dass sie einen
wesentlichen Teil an Spannung an andere Schaltkreise weitergeben können. ATmega-Pins können Strom bis 40 mA aufnehmen oder abgeben. Das macht sie nützlich, um z.B. LEDs
zu versorgen, da diese üblicherweise 40 mA nutzen. Motoren z.B. (Alles, das mehr als 40mA benötigt), brauchen dagegen einen Transistor.
Outputpins können beschädigt oder zerstört werden, wenn sie auf Masse oder auf positive Stromschienen verbunden werden.
Defining built-ins: LED_BUILTIN
Die meisten Arduinos haben einen Pin, der eine on-board LED über einen Vorschaltwiderstand ansteuert. Die on-board LED ist über die Konstante LED_BUILTIN
ansteuerbar.
Die meisten Boards haben die LED auf Digitalpin 13 verbunden.