Digitale Ausgänge

Ein digitaler Ausgang (Pin) kann entweder als HIGH oder LOW geschalten werden, also entweder an oder aus. Ist eine LED an den Pin angeschlossen, so leuchtet diese bei HIGH bzw ist aus, falls der Pin auf LOW geschalten ist.
Wichtig sind hierzu folgende Punkte:
- Die Pinnummer wird in einer Variablen abgespeichert, damit das Programm besser lesbar wird und bei einer Änderung der Pinnummer nur die Variable und nicht das ganze Programm geändert wird.
- Meist wird die Leuchtdauer mit Hilfe von delay() definiert. Dies ist aber bei Anwendungen nicht akzeptabel, falls auf Einflüsse von außen adhoc reagiert werden muss.
- Zur besseren Lesbarkeit und zur logischen Strukturierung sollen wiederkehrende oder in sich geschlossenen Probleme als Methode programmiert werden.
Beispielprogramm
/*
* Blinkprogramm
*/
int led = 3; // die LED ist am Pin Nummer 3 angeschlossen void setup() { // wird einmal zu Beginn aufgerufen pinMode(led, OUTPUT); // der Pin wird als Ausgang definiert } void loop() { // Schleife wird permanent wiederholt digitalWrite(led, HIGH); // schaltet die led an (HIGH) delay(1000); // eine Sekunde warten digitalWrite(led, LOW); // schaltet die led aus (LOW) delay(1000); // eine Sekunde warten }
Vorwiderstand einer LED
Eine LED verträgt im Normalfall eine Stromstärke von ca. 20 mA. Wenn die LED direkt an den 5 V des Arduino angeschlossen werden, würde ein größerer Strom fließen. Die LED würde früher (oder gleich) kaputt gehen. Deshalb muss der Strom verringert werden. Dies erreicht man dadurch, dass die Spannung von 5V auf 2V verringert wird. Dies macht man mit Hilfe eines Widerstandes.
Es gilt: Aus $U = R \cdot I $ bzw. $R = {U \over I} = {{5V -2V}\over {0,020 A}} =150 \Omega$. Man muss also einen Widerstand von ca. $150 \Omega$ mit der LED in Reihe schalten. Wir benutzen im Unterricht einen Widerstand von 330$\Omega$.
Farbcode von Widerständen
Der Farbcode auf Widerständen besteht aus vier Farbringen. Der letzte (4.) Ring einen etwas größeren Abstand:
Farbe | 1. Ring | 2. Ring | 3. Ring | 4. Ring | |
schwarz | - | 0 | - | - | |
braun | 1 | 1 | x10 | ± 1% | |
rot | 2 | 2 | x100 | ± 2% | |
orange | 3 | 3 | x1000 | - | |
gelb | 4 | 4 | x10.000 | - | |
grün | 5 | 5 | x100.000 | ± 0,5% | |
blau | 6 | 6 | x1000.000 | - | |
lila | 7 | 7 | - | - | |
grau | 8 | 8 | - | - | |
weiß | 9 | 9 | - | - | |
gold | - | - | x 0,1 | ± 5% | |
silber | - | - | x 0,01 | ± 10% |
Die ersten zwei Ringe geben jeweils Ziffern an. Der 3. Ring ist ein Multiplikator.
Der 4. Ring gibt die Toleranz an.
- Der Widerstand mit dem Farbcode orange-orange-braun gold hat also 330$\Omega$ und ist zu 5% genau.
- $10 k\Omega$ hat den Farbcode: braun-schwarz-orange.
Hinweise

- rote LED am Pin Nummer 3
- gelbe LED am Pin Nummer 6
- grüne LED am Pin Nummer 5
Die LEDs sind mit einem 330Ω - Schutzwiderstand abgesichert.
Der Schalter ist noch ohne Bedeutung.
Verkehrsampel (Lösung einfach mit delay())
int gelb =6; int gruen = 5; int rot =3; void setup() { // put your setup code here, to run once: pinMode(rot, OUTPUT); pinMode(gelb, OUTPUT); pinMode(gruen, OUTPUT); } void loop() { // put your main code here, to run repeatedly: digitalWrite(rot, HIGH); // turn the LED on (HIGH is the voltage level) digitalWrite(gelb,LOW); // turn the LED on (HIGH is the voltage level) digitalWrite(gruen, LOW); // turn the LED on (HIGH is the voltage level) delay(1000); digitalWrite(rot, LOW); // turn the LED on (HIGH is the voltage level) digitalWrite(gelb,HIGH); // turn the LED on (HIGH is the voltage level) digitalWrite(gruen, LOW); // turn the LED on (HIGH is the voltage level) delay(1000); digitalWrite(rot, LOW); // turn the LED on (HIGH is the voltage level) digitalWrite(gelb,LOW); // turn the LED on (HIGH is the voltage level) digitalWrite(gruen, HIGH); // turn the LED on (HIGH is the voltage level) delay(1000); }
Verkehrsampel (Lösung mit einer Methode)
int gelb = 6; int gruen = 5; int rot = 3; void setup() { pinMode(rot, OUTPUT); pinMode(gelb, OUTPUT); pinMode(gruen, OUTPUT); } void loop() { ampelschaltung(1, 0, 0); delay(1000); ampelschaltung(1, 1, 0); delay(500); ampelschaltung(0, 0, 1); delay(1000); ampelschaltung(0, 1, 0); delay(1000); } void ampelschaltung(boolean ro, boolean ge, boolean gr) { if (ro == 1) { // schaltet rot digitalWrite(rot, HIGH); } else { digitalWrite(rot, LOW); } if (ge == 1) {// schaltet gelb digitalWrite(gelb, HIGH); } else { digitalWrite(gelb, LOW); } if (gr == 1) {// schaltet gruen digitalWrite(gruen, HIGH); } else { digitalWrite(gruen, LOW); } } // ende void ampelschaltung
Verkehrsampel (Lösung ohne Delay)
int gelb = 6; int gruen = 5; int rot = 3; unsigned long start; void setup() { pinMode(rot, OUTPUT); pinMode(gelb, OUTPUT); pinMode(gruen, OUTPUT); start = millis(); } void loop() { if((millis()-start)<1000){ ampelschaltung(1, 0, 0); } if((millis()-start)>1000 && (millis()-start)<2000){ ampelschaltung(1, 1, 0); } if((millis()-start)>2000 && (millis()-start)<3000){ ampelschaltung(0, 0, 1); } if((millis()-start)>3000 && (millis()-start)<4000){ ampelschaltung(0, 1, 0); } if(millis()-start>4000){ start=millis(); } } void ampelschaltung(boolean ro, boolean ge, boolean gr) { if (ro == 1) { // schaltet rot digitalWrite(rot, HIGH); } else { digitalWrite(rot, LOW); } if (ge == 1) {// schaltet gelb digitalWrite(gelb, HIGH); } else { digitalWrite(gelb, LOW); } if (gr == 1) {// schaltet gruen digitalWrite(gruen, HIGH); } else { digitalWrite(gruen, LOW); } } // ende void ampelschaltung