Wow, thanks for taking the time to thoroughly answer my question!
Andrew – This helps quite a bit. It looks like my understanding was the same as what you sent.
Virtus – Correct; every time a command is received it first closes all valves then opens the desired one. This prevents multiple valves from being opened at a time but presents a challenge when the original valve is ready to turn itself off. I’ll have to come up with some better logic to manage state. (but I’m trying to keep this simple and not run task queues and databases)
Doczaius – I have looked at the interval program. It was written by someone who obviously knew what they were doing, but the code is a bit obtuse with short variable names and a lack of comments. Does anyone know who the original author was? Perhaps he/she can answer some questions so I can go through it line-by-line.