Have you taken a look at LabVIEW? I used it pretty heavily back in grad school.
It's a graphical programming language, you connect wires between modules and operators.
Its weird to get used to at first, especially if youre proficient in text-based programming languages, but when you get a feel for letting the program flow drive the logic, you can do some pretty powerful things.
The general idea is that you have a "front panel" that controls user input, and then the back-end programming. Eg, Boolean inputs can be a variety of switches, outputs can be lights and LED's. Floating inputs can be knobs and sliders, outputs can be displays, meters, bar graphs. Very easy to add plots that update in real time.
It's popular with lab research and data acquisition users, since you can easily whip up nice UI's, and many producers of laboratory hardware provide LabVIEW drivers.
You can also easily create advanced techniques or data structures too. Eg, wrap a state machine inside a queue widget, for a "Queued State Machine".
Some drawbacks are that it's proprietary commercial software, and the 'code' can easily become a tangled mess of wires.
http://www.ni.com/labview/
Example implementation of a state machine :
http://www.ni.com/tutorial/7595/en/