In diesem Beitrag soll es im allgemeinen um Taster gehen, an den digitalen Eingängen des Arduino können zwar auch viele andere Bauteile angeschlossen werden. In diesem Beitrag geht es aber um die Taster. Bevor wir uns genauer mit den Tastern beschäftigen können. Müssen wir uns erst um das "leidige" Thema des entprellens von Tastern kümmern. Da die Eingänge des Arduino so flink sind, erkenne sie bei jedem Drücken des Tasters nicht nur einen Tasterdruck, sondern ganz viele. Das liegt in der Bauart der Taster, diese Schalten einfach nicht schnell und sauber genug.
Mit dem kleinen Code unten können wir das sehr gut deutlich machen. Lädt man den Code auf den Arduino, öffnet den Serial Monitor und drückt den Taster, zählt die Variable egal wie kurz der Taster gedrückt wird sehr viele Impulse.
Für machen Anwendungen mag das egal sei, wenn man mit dem Taster einfach eine LED einschalten möchte, dann ist das "prellen" des Tasters egal. Da nach dem einschalten der LED der Taster nicht mehr benötigt wird.
Möchte man die LED mit einem anderen Taster wieder ausschalten geht das nicht so einfach. Wenn man den Code unten auf den Arduino lädt, wird man feststellen, dass die LED in einem undefinierten Zustand ist oder einfach willkürlich an und aus geht.
Taster und digitale Eingänge mit Ardublock entprellen
Damit die Taster vom Programm korrekt erkannt werden, müssen sie entprellt werden. Dazu gibt es verschiedene Möglichkeiten in Ardublock. Die einfachste und schnellte Art einen Taster zu entprellen ist ein "DELAY" Block nach dem Taster zu setzen. Damit wird der Taster nach dem ersten Impuls am Eingang einfach für eine eingestellt Zeit nicht mehr abgefragt. Es haben sich Zeiten zwischen 500 und 1500ms als praktisch erwiesen.
Mit dem Code unten lässt sich die LED nun mit zwei verschiedenen Tastern ein und ausschalten. Bleibt man allerdings länger als eine Sekunde auf dem Taster, dann wechselt die LED ihren Zustand. Drückt man den Taster ein zweites mal dann erkennt das Programm den Tastendruck nicht. Aber für einfache Anwendungen ist dies die eine gute Wahl Taster zu entprellen.
Eine bessere Möglichkeit die Taster zu verwenden ist eine "und" Bedingung zu verwenden. Egal wie lange man nun auf dem Taster bleibt die LED wechselt den ihren Zustand nicht. Da jeweils die nur die Bedingung mit dem Taster aber nicht die zweite mit der digitalen Variablen erfüll ist. So kann man die LED ein und aus Schalten ohne dass es zu einem Blinken kommt.
LED mit einem Taster schalten
Möchte man mit einem Taster eine LED oder einen Motor ein und ausschalten, muss der Zustand vor dem letzen Tasterdruck gespeichert werden. Das geht recht einfach, mit einer digitalen Variablen. Bei jedem drücken des Tasters wird diese entweder auf HIGH oder auf LOW gesetzt. In dem "FALLS" Block wird zudem noch eine "und" Bedingungen hinzugefügt. Nun muss der Taster gedrückt werden und zudem die passende Variable an sein, damit die LED ihren Zustand ändert. Das entprellen geschieht wieder über die delay Zeit. Bei diesem Code würde die LED aber wenn man auf dem Taster bleibt, auch wieder das blinken anfangen.
Besser ist es diesen Code zu verwenden. Durch den Block "only_every" und den Block "solange" Kann die LED nicht das blinken anfangen. Nachteil dieser Art zu entprellen ist dass, das schalten erst nach dem los lassen des Tasters erfolgt. Wenn ich den Taster 3 Minuten gedrückt halte, dann schaltet die LED erst nach 3 Minuten ein. Aber in aller Regel macht man das ja nicht. Durch diese Schaltung ist sichergestellt, dass die LED nur bzw. erst den Betriebszustand ändert, wenn der Taster los gelassen wird. Eine Mehrfachzählung ist nicht möglich.
Wäre nur der "solange" Block im Programm würde das Prellen trotzdem mehrere Impulse verursachen. Durch den "only_every" Block wird die Änderung aber erst nach einer Zeit abgefragt. Theoretisch funktioniert das auch ohne den "only_every" Block aber damit ist man auf der sicheren Seite.
Mehrer LEDs mit einem Taster schalten
Möchte man mehrer LEDs ein und ausschalten, reicht eine digitale Variable nicht mehr, da diese nur zwei Zustände kennt. Nun braucht es eine analoge Variable, die zählt wie oft der Taster gedrückt wurde. Nach dem hochzählen kommen dann die abfrage Blöcke mit der (=) Bedingung. Ist die Variable = 1 oder =2 usw. Dann werden die LEDs geschaltet. In dem Code unten wird beim fünften drücken alle LEDs ausgeschaltet, die Variable zurückgesetzt und damit kann das einschalten von vorne beginnen. So kann man Tastendrücke Zählen.