Inhaltsverzeichnis

Wie man auf einen Tastendruck reagiert

Was du schon weißt

Stecke niemals auf dem Steckbrett um, während der Arduino noch mit Strom versorgt wird.
Achte darauf, dass auf dem Steckbrett keine Kurzschlüsse entstehen.

Was kommt jetzt?

Um zu demonstrieren, wie man auf einen Tastendruck reagieren kann, brauchen wir einen Aufbau, der sowohl einen Taster als auch ein Objekt beinhält, mit dem man die Reaktion sichtbar machen kann. Wir wollen dazu den Aufbau mit der Leuchtdiode erweitern:

Vorsicht! Wenn in diesem Aufbau der Arduino mit Strom versorgt wird und der Taster gedrückt wird, kann in seltenen Fällen ein Kurzschluss entstehen. Dem kann man nur sicher entgehen, wenn man nach der Stromversorgung des Arduino und vor dem erstaligen Drücken des Tasters ein zum Aufbau passendes Programm aufgespielt wird.

Ein pssendes Programm wäre:

void setup() {
  pinMode(3, OUTPUT);
  pinMode(2, INPUT_PULLUP);
}
 
void loop() {
  if(!digitalRead(2)) {
    digitalWrite(3, HIGH);
    delay(250);
  }
}

Die Zeile

  pinMode(2, INPUT_PULLUP);

im setup-Teil teilt dem Arduino mit, dass er am Kontakt D2 erwarten soll, dass dort Strom in den Arduino fließt. Zudem schaltet er einen großen Widerstand in den Stromkreis, sodass selbst bei gedrücktem Taster kein Kurzschluss entsteht!

Die Zeilen

  if(!digitalRead(2)) {
    digitalWrite(3, HIGH);
    delay(250);
  }

im loop-Teil veranlassen den Arduino zu prüfen, ob Strom einfließt über den Kontakt D2. Falls ja, schaltet der Arduino die Leuchtdiode ein und wartet eine Viertelsekunde.

Problem: Der Arduino schaltet die Leuchtdiode zwar ein, aber nicht wieder aus!

Um das leisten zu können, müsste sich der Arduino „merken“, ob die Leuchtdiode schon eingeschaltet ist oder nicht. Dazu verwenden wir eine Merkvariable, die nur zwei Werte speichern kann: wahr bzw. falsch, oder gleichwertig: ein bzw. aus. Der Wert wahr lautet auf englisch true und ist mit HIGH gleichwertig. Der Wert falsch lautet auf englisch false und ist mit LOW gleichwertig.
Damit sollte der Quelltext wie folgt aussehen:

boolean status;
 
void setup() {
  pinMode(3, OUTPUT);
  pinMode(2, INPUT_PULLUP);
  digitalWrite(3, LOW);
  status = false;
}
 
void loop() {
  if(!digitalRead(2)) {
    status=!status;
    digitalWrite(3, status);
    delay(250);
  }
}

Die Zeile

  status = false;

setzt zu Beginn den Merker, ob die Leuchtdiode eingeschaltet ist, auf ausgeschaltet. Die Zeilen

    status=!status;
    digitalWrite(3, status);

ändern zuerst den Status von wahr auf falsch bzw. umgekehrt (je, nachdem). Zudem wird die Leuchtdiode dann ein- oder ausgeschaltet. (Wieder je, nachdem! Bedenke, statt HIGH kann man auch true beim Schalten schreiben, statt LOW auch false.)

Und wenn wir schon so weit sind, führen wir zwei weitere Merker ein: eine Variable (ledPin) soll sich merken, an welchem Kontakt die Leuchtdiode angeschlossen ist, die andere (tasterPin), wo der Taster zu finden ist.
Das hat den Vorteil, dass man sich bei mehreren verwendeten Kontakten nur die Namen merken muss. Das fällt den meisten Leuten einfacher, als sich Zahlen zu merken!

Damit sieht der Quelltext folgendermaßen aus:

vollständiges Programm mit Taster

int ledPin = 3;
int tasterPin = 2;
boolean status;
 
void setup() {
  pinMode(ledPin, OUTPUT);
  pinMode(tasterPin, INPUT_PULLUP);
  digitalWrite(ledPin, LOW);
  status = false;
}
 
void loop() {
  if(!digitalRead(tasterPin)) {
    status=!status;
    digitalWrite(ledPin, status);
    delay(250);
  }
}

Ziel erreicht

Herzlichen Glückwunsch! Du weißt nun, wie man auf einen Tastendruck reagiert und z.b. eine Leuchtdiode einschaltet.

Weitere Ideen

Wenn du noch Zeit hast, kannst du folgendes ausprobieren:

Wie geht's weiter?

Weiter geht's mit Wie man einen Servomotor ansteuert.