Die beiden Tasten werden mit den Anschlüsse 1 und 3 verbunden. Sie verbinden beim Drücken diese Anschlüsse mit dem Minuspol (GND). Damit wird der entsprechende Eingang LOW. Damit der Eingang auch dann einen festen Pegel hat, wenn die Taste nicht gedrückt wird, zieht man ihn über INPUT_PULLUP intern auf den HIGH-Pegel (PullUp-Widerstand).
Es ist umständlich, dass die LED über zwei Schalter bedient wird. Besser wäre ein Schalter, der bei jedem Druck die LED in den anderen Zustand verstetzt.
Der Taster ist monostabil; er hat in Ruhe also nur einen stabilen Zustand. Trotzdem ist es möglich, damit einen bistabilen Schalter zu programmieren.
Dazu ist eine Variable notwendig, in der der aktuelle Zustand der LED gespeichert wird. Sie ist vom Typ bool und kann die Werte true und false aufnehmen.
Leider funktioniert das Programm nicht! loop() wir ja ununterbrochen ausgeführt und ändert bei jedem Durchlauf den Zustand der LED. Damit wird die LED laufen umgeschaltet. Das sieht man sehr schön, wenn man nach in die Entscheidung eine Wartezeit von z.B. 100 ms einfügt.
Um dieses Problem zu lösen, wird auf eine vorhandene Lösung zurückgegriffen. Auf der Seite zum Calliope mini:
https://calliopemini.info
gibt es die Seite
"Warten ist doof"
Der dort gezeigt Programmablaufplan kann in ein Programm für das Board umgesetzt werden.
Leider läuft es dann immer noch nicht perfekt. Schuld ist das Prellen des Schalters. Abhilfe schafft hier ein kleiner Kondensator von etwa 20 nF, der parallel zum Schalter
gesetzt wird oder eine kurze Wartezeit von 10 ms jeweils nach dem Neusetzen der Variablen taste.
Einen guten Artikel zum Thema Entprellung findet man hier: mikrocontroller.net