Die 14 I/O Pins D0, ..., D13 des Arduino Boards können auch als digitale Eingänge konfiguriert werden. Der digitale Zustand eines PINs hängt von der Spannung ab, die an einem PIN anliegt: 0V .. LOW und 5V . . . HIGH.
Der Stromkreis an einem digitalen Eingang muss so aufgebaut sein, dass verschiedene Zustände (z. B. Taster ein/aus oder Schalter ein/aus) bewirken, dass an dem PIN 0V oder 5V anliegen. Dies wird meist dadurch erreicht, dass ein Widerstand zwischen den PIN und die Versorgungsspannung 5V geschaltet wird. Ein solcher Widerstand wird als Pull Up – Widerstand bezeichnet. Durch diesen liegt am Pin eine Spannung von 5V (Zustand HIGH) an.
Ein Taster wird nun mit einem PIN und der Masseleitung GROUND verbunden. Wird der Taster geschlossen, so fließt der Strom vom Pull Up – Widerstand über den GROUND ab und am PIN liegen 0V an, was dem Zustand LOW entspricht.
Dadurch gibt sich eine Umkehrung der digitalen Logik – offener Taster Zustand HIGH (1) und geschlossener Taster Zustand LOW (0) – was beim Programmieren entsprechend berücksichtigt werden muss.
Aufbau und Material
- 1 Taster
- 1 Widerstand 10k (Farbcode braun schwarz orange)
Programmierbeispiel
Zunächst muss in einem Programm ein PIN als digitaler Eingang festgelegt werden. Dies geschieht mit der Funktion pinMode(). Der Zustand eines Eingangs wird mit der Funktion digitalRead() ermittelt. Im folgenden Programm wird der Zustand des PIN 4 eingelesen und dieser bestimmt dann über den Zustand des PIN 13 an dem die LED des Arduino Boards angeschlossen ist.
- Die LED leuchtet, wenn der Taster nicht gedrückt ist (5V am PIN 4 . . . HIGH).
- Die LED leuchtet nicht, wenn der Taster gedrückt wird (0V am PIN 4 . . . LOW).
void setup()
{
pinMode(13, OUTPUT); // Pin 13 als digitaler Output
pinMode(4, INPUT); // Pin 4 als digitaler Input
}
void loop()
{
int TasterZustand = digitalRead(4); // Auslesen des Zustands des Pins 4 und Ablegen in der Variable TasterZustand
digitalWrite(13, TasterZustand); // Zustand von Pin 13 auf HIGH (5V) oder LOW (0V) seztzen, abhängig vom Wert der Variable TasterZustand
delay(1);
}
Erklärungen zu diesem Programmierbeispiel
pinMode(pin, mode)
Mit dieser Funktion wird das Verhalten eines der 14 I/O PINs festgelegt.
pin: 0, ..., 13
mode: OUTPUT, INPUT, INPUT_PULLUP
int TasterZustand = digitalRead(pin)
Die Funktion digitalRead() dient zum Lesen des Zustands, wenn ein PIN als Eingang konfiguriert ist. Der Rückgabewert dieser Funktion (LOW oder HIGH, entspricht den Werten 0 oder 1) und wird in der Integervariable TasterZustand abgelegt.
pin: 0, ..., 13
return: LOW, HIGH
digitalWrite(pin, value)
Diese Funktion dient zum Setzen des Zustands, wenn ein Pin als Ausgang konfiguriert ist. Hier wird für value der Wert der Integervariable TasterZustand übergeben. Dieser wurde zuvor durch Aufruf der Funktion digitalRead() bestimmt und hat den Wert 0 oder 1, was den Werten LOW oder HIGH entspricht.
pin: 0, ..., 13
value: LOW, HIGH (bei LOW liegen am Pin 0V, bei HIGH liegen am Pin 5V an)
delay(value)
Soll der Programmablauf an einer Stelle unterbrochen werden, so wird die Funktion delay() aufgerufen.
value: ganzzahliger Wert (Wartezeit in Millisekunden)