FSM- wie?

Hallo,

wie geht ihr für gewöhnlich vor, wenn ihr im Rahmen eurer Projekte endliche Zustandsautomaten braucht?

Bastelt ihr da dann jedesmal selber was zusammen, greift auf Bewährtes zurück, oder bedient ihr euch Libraries?

Da mich das Thema immer wieder aufs Neue beschäftigt, gehe ich einfach mal davon aus, dass ich da nicht der Einzige bin. :stuck_out_tongue:

Ich bediene mich meistens dieser Library, ohne mit ihr verheiratet zu sein. Könnte für meinen Geschmack ruhig noch etwas kompakter sein, das Ganze.

Gruß Chris

Hallo Chris,
als Hobby-Programmierer und Arduino-Anfänger fange ich mit enum an und bastle mir den endlichen Automaten mit switch/case. Das verstehe ich, das kann ich nachvollziehen, das funktioniert im Rahmen meiner Aufgabenstellungen.

Bibliotheken finde ich praktisch, da Lernen und Erfolg in einem gesunden Verhältnis stehen müssen, habe sie aber in diesem Zusammenhang noch nicht benötigt.

Du hast gefragt, das ist meine Antwort.

Da Du seit 2012 dabei bist, verlinke ich Dir mal nicht meine Anleitung zum endlichen Automaten mit Kohlekranbeispiel :slight_smile:

Hallo,

also das kommt darauf an ... :slight_smile:

Für kleinere Fälle bin ich eigentlich ein Freund der Variante mit enum (oder besser enum class in C++11) und der switch/case Variante.

Bei komplexerer Logik eher das "state" Entwurfsmuster mit Klassen (oder auch Lambda Funktionen in C++11).

Zu dieser Library hätte ich auch das passende Buch, habe aber die Arduino Version noch nie ausprobiert:
http://playground.arduino.cc/Code/QP

Es gibt auch noch Dinge die in der Komplexität zwischen vollständigen Entwurfsmustern und switch/case liegen:
https://forum.arduino.cc/index.php?topic=332907.0

Diese FSM Library ist auch sehr schön:
http://playground.arduino.cc/Code/SMlib
Die macht etwas ähnliches wie die erste Version in dem Link. Der nächste Zustand wird über einen Funktionszeiger verwaltet. Den muss man nur ändern um in den nächsten Zustand zu gelangen. Da hat man auch die Option eine Funktion nur beim Zustandswechsel aufzurufen und eine andere danach.