Please a short Thread::sleep between commands to the master valves.
Since they only need to be on for certain zones, just move the command to that if block and use a short Thread::sleep between the master valve and sprinkler.
Also, Design Pattern: Cascading Timers might be useful for you.