Digitaler Eingang
Ein Schalter wird an einen Pin angeschlossen, welcher als Eingang deklariert werden muss. Ein digitaler Eingang kann entweder den Zustand HIGH oder LOW haben. Ein typisches Bauteil ist ein Schalter, der entweder gerückt oder losgelassen sein kann. Den Schalter kann man auch als einen Widerstand betrachten, der entweder den Widerstand 0 Ω (Schalter gedrückt) oder einen unendlich großen Widerstand (Schalter losgelassen) hat.
Spannungsteiler

Alle analogen und digitalen Widerstände müssen über den Spannungsteiler angeschlossen werden, damit am Messpin ein klare definierte Spannung anliegt.
Warum braucht man einen Spannungsteiler?

Zunächst schließen wir am Arduino einen Button an. Wir verbinden den Button mit einem digitalen Pin und andererseits mit einem 5 V - Pin (mit dem GRN - Pin).
Es gibt 4 Fälle:
Welche Spannung müsste jeweils am Pin ablesbar sein?
Wir überprüfen dies, indem wir uns über die serielle Schnittstelle den Zustand des Pins anzeigen. Es ist besser, sich nur dann etwas anzeigen zu lassen, wenn sich der Zustand ändert.

Man stellt fest, dass der Zustand des Pins nur dann genau definiert ist, wenn der Button geschlossen ist. Ist der Schalter offen, so liegt der Buttonpin quasi in der "Luft". Der Zustand ist nicht genau definiert und seine Werte werden zufällig.
Deshalb muss der digitale Eingangspin an einem Spannungsteiler angeschlossen werden. Der Pin liegt also immer zwischen zwei Widerständen. Wobei einer der Widerstände ein Sensor ist. Im Falle des Schalters kann der Widerstand fast Null oder unendlich groß sein.
Bei anderen Sensoren (Temperatur, Licht, ...) sind aller Zwischenwerte denkbar; diese werden deshalb an einem analogen Port angeschlossen.
Beispielprogramm: Solange man den Schalter drückt, wird die interne LED Nr. 13 angeschalten.
int led = 13; // interne LED int schalter = 8; // Pin, an der der Schalter angeschlossen ist int buttonState = 0; // Variable für den Zustand des Schalters void setup() { pinMode(led, OUTPUT); // LED-Pin wird als Ausgang deklariert pinMode(schalter, INPUT); // Button-Pin wird als Eingang deklariert Serial.begin(9600); // serielle Kommunikation wird gestartet } void loop() { buttonState = digitalRead(schalter); // Einlesen des Pinzustandes und Abspeichern in der Variablen Serial.print(buttonState); // zusätzlich wird der Zustand über die serielle Schnittstelle ausgegeben if (buttonState == HIGH) { // falls der Zustand HIGH (Schalter geschlossen) ist digitalWrite(led, HIGH); } // Lampe an else { digitalWrite(led, LOW); } // Lampe aus }
4. Aufgabe: Verkehrsampel
Fehler finden
Leider haben sich in die Versuche einige Fehler eingeschlichen.