Skip to content
An FSM library based upon arduino-fsm that allows using FSMs within other objects
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.


A library that simplifies the creation of finite state machines and streamlines the process of turning state diagrams into code. It encourages objects to have ownership of their state by allowing finite state machines to be held by other objects.

This library works in any C++11 supported environment, including Arduino compatible microcontrollers that have implementations of std::chrono, std::function and std::vector (eg. ESP32).

Examples of use are included in the library, they compile in the Arduino environment but show how the library can be used in general.


Feel free to submit pull-requests for any features or improvements you'd like to develop.


Major credit to Jon Black's arduino-fsm - an arduino library for implementing finite state machines.

function-fsm was developed to expand upon the functionality of this library (allowing FSM's to be used within other classes, allowing the library to be used outside of the Arduino environment, and providing other useful features too!). While a lot of the code has been rewritten, function-fsm leans heavily on the structure of arduino-fsm. Many thanks to Jon Black for having provided such a useful arduino library

Also, the top answer to my Stack Overflow question that sparked this, thank you.

You can’t perform that action at this time.