Metainformationen zur Seite
  •  

Dies ist eine alte Version des Dokuments!


Wie man auf einen Tastendruck reagiert

Was du schon weißt

  • Wie man eine LED an den Arduino anschließt und einen Widestand verwendet.
  • Wie man einen Quelltext bzw. ein Programm auf den Arduino hochlädt.
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.

Wie geht's weiter?

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(500);
  }
}

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.

Die Zeilen

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

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.

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(500);
  }
}