Das Programm soll die LED einschalten, wenn der Taster gedrückt wird und abschalten, wenn der Taster nicht mehr gedrückt wird. Ich schlage vor, wir starten mit unserem Blink-Beispiel.
int ledPin = 9; void setup(){ pinMode(ledPin, OUTPUT); } void loop(){ digitalWrite(ledPin, HIGH); delay(200); digitalWrite(ledPin, LOW); delay(200); }
Das Programm kennst du ja bereits (siehe Lektion 7). Wir werden es jetzt einfach umbauen.
Ich schlage vor, dass wir die Pin-Nummer, an welche der Taster angeschlossen ist, wieder in einer Variable speichern.
int tasterPin = 11;
Dann müssen wir dem Arduino-Board sagen, dass wir den Pin als Eingabe verwenden wollen. Der Befehl dafür lautet:
pinMode(tasterPin, INPUT);
Du hast es schon gemerkt, oder? Der Befehl ist der gleiche wie der für die LED. Wir sagen einfach nur, dass wir jetzt keinen OUTPUT, sondern einen INPUT verwenden wollen.
Um herauszufinden, ob der Taster gedrückt (HIGH) oder nicht gedrückt (LOW) ist, können wir den folgenden Befehl verwenden:
digitalRead(tasterPin);
Bisher haben wir nur Befehle verwendet, die keine Ergebnisse liefern. Dieser hier sagt aber HIGH oder LOW, wenn wir ihn verwenden. Das nennt man den Rückgabewert.
Schwer? Na gut. Stell dir vor, es würde eine Methode geben, die summe (a, b) heißt. Die Parameter a und b wären zwei Zahlen, die wir zusammen rechnen wollen. Das Ergebnis wird von der Methode als Rückgabewert übertragen. Um nun herauszufinden, wie das Ergebnis ist, müssen wir das Ergebnis auslesen. Das geht so: c = summe (a, b);. Jetzt ist das Ergebnis in der Variable c gespeichert.
Der Befehl digitalRead(tasterPin); liefert entweder HIGH oder LOW zurück. Aber wie finden wir denn nun heraus, ob das Ergebnis HIGH oder LOW ist? Dafür gibt es eine der wichtigsten Konstruktionen in der Programmierung: die if-Abfrage.
Die if-Abfrage
Mit dieser Abfrage können wir testen, ob eine Aussage wahr oder falsch ist. Nehmen wir an, du hast rote und blaue Bausteine vermischt und du willst sie in zwei Boxen sortieren. Wie würdest du das machen?

Vielleicht so:
- nimm einen Baustein
- prüfe, ob der Baustein rot ist
- wenn er rot ist, packe den Stein in Box A
Genau so benutzt man die if-Abfrage. Es ist also eigentlich ganz einfach. So wird sie geschrieben. Achte auf die zwei Gleichheitszeichen hintereinander. Das ist bei einer if-Abfrage sehr wichtig.
if (Baustein==rot) { packe Stein in Box A }
So, jetzt könnten wir alle roten Bausteine in Box A packen, würden aber alle blauen Steine nach der Überprüfung einfach liegen lassen. Wie kommen die jetzt in Box B? Ein Vorschlag:
- nimm einen Baustein
- prüfe, ob der Baustein rot ist
- wenn er rot ist, packe den Stein in Box A
- sonst packe ihn in Box B
Gut, oder? Und so könnten wir das programmieren:
if (Baustein==rot) { packe den Stein in Box A } else { packe den Stein in Box B }
Wir benutzen also das Wort else. Das trifft sich gut, denn else heißt auf Deutsch sonst.

Hast du den grünen Stein gesehen? Der wandert auch in Box B, denn wir fragen ja nicht, ob der Baustein blau ist, sondern nur: Ist er rot oder ist er nicht-rot? ;-)
Nun aber zurück zu unserem Programm. Das sieht bisher so aus und muss verändert werden:
int ledPin = 9; int tasterPin = 11; void setup(){ pinMode(ledPin,OUTPUT); pinMode(tasterPin,INPUT); } void loop(){ digitalWrite(ledPin, HIGH); delay(200); digitalWrite(ledPin, LOW); delay(200); }
Die if-Abfrage für den Button fragt, ob der Button HIGH ist:
if (digitalRead(tasterPin)==HIGH){ }
Wenn der Button HIGH ist, soll die LED eingeschalten werden:
if (digitalRead(tasterPin)==HIGH){ digitalWrite(ledPin, HIGH); }
Ansonsten (else) soll sie ausgeschaltet werden:
if (digitalRead(tasterPin)==HIGH){ digitalWrite(ledPin, HIGH); } else { digitalWrite(ledPin, LOW); }
Hier noch mal das ganze Programm:
int ledPin = 9; int tasterPin = 11; void setup(){ pinMode(ledPin,OUTPUT); pinMode(tasterPin,INPUT); } void loop(){ if (digitalRead(tasterPin)==HIGH){ digitalWrite(ledPin, HIGH); } else { digitalWrite(ledPin, LOW); } }
Funktioniert es? Super. Jetzt versuche das Programm so umzuschreiben, dass die LED aus geht, wenn der Taster gedrückt ist. Die Lösung findest du hier unten:
Hier zwei von vielen Vorschlägen:
int ledPin = 9; int tasterPin = 11; void setup(){ pinMode(ledPin, OUTPUT); pinMode(tasterPin, INPUT); } void loop(){ if (digitalRead(tasterPin)==LOW){ digitalWrite(ledPin, HIGH); } else { digitalWrite(ledPin, LOW); } }
Oder:
int ledPin = 9; int tasterPin = 11; void setup(){ pinMode(ledPin, OUTPUT); pinMode(tasterPin, INPUT); } void loop(){ if (digitalRead(tasterPin)==HIGH){ digitalWrite(ledPin, LOW); } else { digitalWrite(ledPin, HIGH); } }
Das war jetzt aber gar nicht so einfach. Schön, dass du es trotzdem geschafft hast. Jetzt kennst du schon die wichtigsten Dinge beim Programmieren: Variablen, Schleifen und if-Abfragen. Weiter so! Von jetzt an wird alles viel einfacher. Versprochen.
Hallo nochmal, ich hatte vor einigen Tagen schon mal geschrieben, aber keine Antwort erhalten und mein Kommentar ist auch weg. Daher nochmal:
Ich habe die Schaltung 12 wie dargestellt aufgebaut und den Sketch so geschrieben, wie abgebildet. Aber meine Schaltung funktioniert sehr instabil und unzuverlässig. Die LED leuchtet, aber wenn ich den Taster drücke, passiert meist gar nichts, dafür geht die LED aus, wenn ich gar nicht drücke.
Dann habe ich nach vielerlei Recherche den Programmsatz: pinMode(tasterPin, INPUT); geändert in: pinMode(tasterPin, INPUT_PULLUP);
Und alles funktioniert wunderbar stabil und zuverlässig. Nur, ich verstehe nicht warum? Was macht denn der Zusatz „PULLUP“ aus? Und warum brauche ich den und andere nicht?
Für eine erklärende und verständliche Antworet wäre ich sehr dankbar.
Der Sketch funktioniert bei mir sehr unzuverlassig. Wenn ich aber üinMode(tasterPin, INPUT_PULLUP ändere funktioniert alles sabil und einwandfrei. Kann mir bitte jemand erklären, woher das kommt?
Hallo Günter,
Damit ein uC Aus-oder Eingang besser detektieren kann müssen PullUp oder PullDown Widerstände aktiviert werden, dabei werden interne Widerstände so geschalten, dass sie eine Vergleichsspannung (Uref meist Vcc) haben, dadurch werden Störungen die den Zustand beeinflussen können abgefangen. Wenn Taster dann gedrückt ist Pin liest high und wenn Taster gedrückt Pin geht aus LOW.
Hallo,
Ich bin gerade am verzweifeln…
Ich lass mein Programmiercode von der Arduino IDE überprüfen, alles gut.
Allerdings ist die Funktion nicht gegeben.
Ich möchte die Schrift auf einem Display ändern durch Tastendruck (1x Hallo, 2. Bitte beachten Sie…)
Also soll nachher pro Tastendruck eine neue Schrift auf dem Display erscheinen. Allerdings funktioniert das bei mir nicht so wie im Programm, sondern nach Ablauf der Zeit.
Hi Jonas, ich hab mal hier ein Projekt: Kompliment-Maschine gebaut, dass so ähnlich funktioniert. Ich hoffe, dass es dir weiter hilft. Liebe Grüße Stefan
Hallo,
zunächst erstmal vielen Dank für die vielen hilfreichen Anleitungen. Ich nutze Arduino jetzt seit ca. 4 Jahren für unsere Modellbahn. Nun bin ich auf ein Problem gestoßen das ich nicht hinbekomme.
Ich habe eine Seilschwebebahn mit 2 Gondeln auf der Anlage, die soll hoch und runter fahren – ist ja klar. Antrieb ist ein 12v DC Getriebemotor mit Richtungswechsel via Doppelrelaismodul, soweit so gut… bei meiner Standseilbahn habe ich die Umschaltung mit 3poligen Rollenendschaltern realisiert – die läuft jetzt 3 Jahre.
Da aber die Gondeln für die Endschalter zu leicht sind und nicht auslösen hab ich das mit Reed Kontakten gebaut. Das Problem dabei ist das sofort die Drehrichtung wieder gewechselt wird, sobald der Schalter unterbricht nach der Ausfahrt. Eine Timerschaltung will ich nicht machen. Es muss doch irgendwie gehen das die Drehrichtung vom Wechsel unten bis zum Auslösen des anderen Schalters oben beibehalten wird und umgekehrt auch. Ich zweifle schon an mir selbst, vielleicht sitze ich nur einfach auf der Leitung… keine Ahnung…
Ich wäre für Hilfe sehr dankbar.
Liebe Grüße aus Radeberg
Ich möchte hier auch definitiv ein fettes „Danke“ hinterlassen!
Ich programmiere seit vielen Jahren meine selbst gebauten Schaltungen usw.
Bisher alles in Basic per „Bascom“ und bisher hat alles immer gut geklappt usw….
Ich möchte mich aktuell mit Arduino auseinander setzen um weitere Möglichkeiten zu eröffnen.
Nach kurzer Suche hab ich dieses Tutorial gefunden und interessiert gelesen,
stoppe jetzt erstmal mit dem lesen da ich aktuell noch keine Hardware zum testen vor Ort habe.
Ich finde es ausgesprochen lobenswert, dass es Menschem gibt, die so fabelhafte Websites erstellen um anderen gratis das programmieren in einer Sprache bei zu bringen, mit der sie noch nie etwas zu tun hatten.
Ich als halbwegs erfahrener Hobbyprorammierer habe zwar schnell festgestellt dass die Grundstruktur bei Arduino nicht viel anders ist als in Basic, nur die Befehle sind halt etwas anders formuliert.
Die Einführung in Arduino ist hier aus meiner Sicht vollkommen verständlich erklärt, ich wüsste nicht wie man es besser machen könnte……Fetter Daumen hoch!!!!!!!!!!
Solch konstruktive Websites unterstütze ich gern, hab daher auch direkt das empfohlene Starterpack bei Amazon für etwas über 50€ bestellt, was ich durchaus fair finde.
Bitte macht weiter so, ich freue mich darauf dieses HowTo weiter zu erkunden
und weitere Funktionen kennen zu lernen :-)
Hallo Andreas,
vielen lieben Dank für diesen freundlichen Kommentar! Das freut mich wirklich riesig und ich hoffe, dass du mit Arduino genau so viel Spaß haben wirst, wie ich :-)
Hab einen schönen Tag und liebe Grüße Stefan
Hallo.
Bin neu und Anfänger.
Problem : Sketch mit IF abfrage und Taster
Taster auf + oder auf GND
LED immer auf HIGH
Habe verschiedene Varianten ausprobiert…
ich habe 7 leds und darunter eine grüne mit dem taster will ich abfragen ob die Grüne led leuchtet wenn sie leuchtet soll eine andere auf der rechten seite angehen bitte um hilfe
Hi Moritz, ist die grüne LED auch per Arduino gesteuert?
Das einzige Problem ist, einen Taster anzuschliessen.
Das ist nicht so trivial wie der Rest deines Beitrags, finde ich.
pinMode(tasterPin, INPUT); // erfordert einen Pulldown-Widerstand.
Was hältst du übrigens von
void loop() {
digitalWrite(ledPin, digitalRead(tasterPin)); // led zeigt taster Zustand an.
}
Sehr gut gemacht!!!!! Einfach und endlich mal verständlich!!
Besten dank
mfg
Festus Heggen
vielen Dank für die tollen Erklärungen. Ich habe zwei Arduino Anfänger Bücher und in keinem ist es so gut erklärt wie hier. Echt super!
Vielen Dank für diesen schönen Kommentar :-)