CN1 Beispiel: Blinken einer LED mit Timer

Hardware

An den Pin PA0 wird eine LED und ein Vorwiderstand von 1.2kOhm gelegt. Die LED erhält ihre Spannung aus dem 3.3V Ausgang der CN1.

 

CN1 Pinout

Software

Das vorherige Beispiel war nicht sehr multitasking freundlich wegen der Verwendung von sys.sleep. In diesem Beispiel soll die Timers Library verwendet werden. Diese Library ist in Lua geschrieben und muss auf auf die SD-Card geladen werden. Sie basiert auf der cn Library. Hier kann man die beiden Files herunterladen: cn

Bitte das ganze Verzeichnis cn auf die SD-Card kopieren. Das sollte dann so aussehen:

 

 

Im ZeroBrane Studio geben wir dieses Programm ein und speichern es unter startup.lua. Dann auf der CN1 Reset drücken damit es gestartet wird.

Zu den Biblotheken sys und pin laden wir nun auch cn.cn und cn.timers. Die qualifizierte Schreibweisen mit dem vorangestellten cn. läd die Biblotheken aus dem Ordner cn

Mit timers.add wird ein neuer Timer erzeugt der alle 0.5 Sekunden die übergebene anonyme Funktion aufruft. Dieser läuft quasi parallel zum Hauptprogramm.

Die letzten zwei Zeilen sind wichtig: Das Programm muss in eine Endlosschleife gehen, in der alle nötigen Funktionen zum Betrieb im Hintergrund aufgerufen werden. Das hier z.B. die Timers Library.

Diese naheligende Lösung hat aber ein paar Nachteile: Die Kapselung ist nicht gut, es gibt zwei globale Variablen toggle und led. Noch ungünstiger ist aber das die anonyme Funktion eine Statemachine enthält. Statemachines sind grundsätzlich kompliziert, fehleranfällig und schwer zu lesen. Sie sind besser als Task mit einer Programmstruktur zu realieren. Das nächste Beispiel verwenden statt der Funktion einen Thread:  

Jetzt gibt es die beiden globalen Variablen toggle und led nicht mehr. toggle ist sogar komplett überflüssig geworden. led wird nur local angelegt.

No votes yet.
Please wait...