Der "at most all" ist mit einer der wichtigsten Block in Ardublock. Zumindest wenn man die Ardublock "experimental" von duinoEDU verwendet. In der "experimental" Version gibt es nämlich Blöcke wie "scoop" oder "count state change" nicht. Nur mit dem "at most all" früher "only every" ist es damit möglich auf "delay" Blöcke zu verzichten. Delay Blöcke braucht es in aller Regel um LEDs zum blinken zu bringen um Taster zu entprellen oder auf die Nächste Eingabe zu warten. "Delay" Zeiten bremsen den Arduino aber auch extrem aus, da in einer "delay" Schleife nichts anderes gemacht wird als Warten.
Mit dem "at most all" Block kann dieses Problem ganz einfach aber mit etwas Aufwand gelöst werden. Der Bock findet sich in den gelben Blöcken der Steuerung.
Diesen Block kann man vorstellen wie einen Zähler der im Hintergrund mitläuft. Das Programm unterhalb des Blockes "at most all" ist wie das normale Arduino Programm, alle Eingänge werden abgefragt, Ausgänge geschaltet usw. Der Block "commands" wird dagegen nur alle 100ms. (oder was bei ms. eingetragen wird) wiederholt. .
Lädt man das Programm unten auf den Arduino und öffnet man den Serial Monitor, dann sieht man das zählen des "at most all" Blockes und gleichzeitig wie oft der "serial print" ausgegeben wird. Damit haben wir nun einen Zeitgeber der unabhängig von unserem restlichen Programm arbeitet.
Um mit diesen Zeiten nun programmieren zu können werden sich über die "fals" Blöcke abgefragt. Wichtig ist nur den Zähler bzw. die Variable auch wieder irgendwann zurückzusetzen.
Links im Bild wie das ganze kann dann für eine blinke LED mit "at most all" aussieht und rechts wie das ganze mit "delay" aussieht.
Ist die Variable 0 wird die LED eingeschaltet. Im Hintergrund wird nun die Variable "integer" hochgezählt. Bei 10 wird die LED ausgeschaltet und bei 20 wird die Variable zurückgesetzt. Damit ist die LED 1 Sekunde an und dann 1 Sekunde aus. Anstatt 3 "falls" Blöcke zu verwenden könnte man auch in die ersten beiden "falls" Blöcke einfach 10 und 20 schreiben, das Ergebnis ist das gleich. Hier zum testen habe ich aber 3 verwendet damit es besser zu sehen ist. Natürlich ist das etwas mehr Aufwand ABER es lohnt sich, da der Arduino im Gegensatz zum rechten Code, keine zeitlichen Ressourcen verschwendet.
Soll dagegen ein Taster entprellt werden kann das ganze so aussehen.
Wird der Taster betätigt, wird die Variable des Zählers auf 0 gesetzt und eine digitale Variable auf low. Ist die zeit abgelaufen wird die Variable wieder auf HIGH gesetzt und der Taster kann nun erneut abgefragt werden. Damit ist der Taster für 1 Sekunde nicht abrufbar und entprellt.
Wer nun unterschiedliche Zeiten bzw. LEDs blinken lassen möchte und Taster abfragen will, der muss natürlich unterschiedliche Zeiten haben. Sonst würde beim drücken eines Taster ja der Blinkrhythmus durcheinander kommen. Dazu werden einfach verschiedenen "at most all" Blöcke verwendet. Einen zum Beispiel für die LEDs und einen zum Beispiel für die Taster. Zum testen kann der Code unten ja einmal hochgeladen werden.