The project would be able to run on an Uno, the user interact through serial monitor or a VT-100 emulator. (VT-100 text screen control allows way more display and key entry options)
The user can start tasks running from a menu of supported types to be configured. Once started the task continues to run and the user may interact with it also through menu choices.. always the legal options get shown.
Examples of tasks are of course button and led (and all hardware I/O). Processes are less cut and dry.
I want to keep variables internal to task objects as properties. An object that does output, like a button, should have output variable(s) that it keeps updated. An object that does input should have link(s) to point to output variable(s) to be read. These things must show up in user task configuration menus for all task objects.
Note that a led task could have an input link directly to a button task status output. Next add a timer process task with input link set to the button status and link the output value of that to led to get a non-blocking delay without writing code.
But perhaps I can merge process tasks by letting the user add timer, counter, etc, as the do part?
For processes, I start with when (not if, when fits the approach better) condition do xxxx as the first and then add timers, repeats, timed repeats, countdowns and call states modes in a modal task with timer menu choice.
The condition above are so far output variables (linked to or local) and constants used in logical operations, ex: when button status == 2 do xxxx (not set on this).
I'm still trying to frame this right to give beginners the ability to set up and run simple operations without knowing the details just to see how the pieces can fit and work together. I could make something very flexible that would not be easy for beginners.