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
}

  Aufgabe 1: Drückt man den Schalter, so wird eine externe LED angeschalten.
  Aufgabe 2: Es soll die Anzahl gezählt werden, wie oft man auf den Schalter drückt.
  Aufgabe 3: Einen Schalter zum Ein- und Ausschalten einer LED

4. Aufgabe: Verkehrsampel

Die Ampel soll ganz normal von Rot über Gelb nach Grün schalten. Wir der Schalter betätigt, so soll die rote LED sofort beginnen für 5 Sekunden 10 mal zu blinken.
 
  Aufgabe 4:Verkehrsampel

Fehler finden

Leider haben sich in die Versuche einige Fehler eingeschlichen.