// conveyor runs
// bucket breaks light beam
// conveyor stops
// water dispenses for 5 sec
// conveyor starts again
// -repeat-
const int senseWaterStn = 3;  // Sensor pin (IR sensor, water station)
const int drive         = 7;  // conveyor belt
const int waterfill     = 11; // Water valve pin (water fill station) / relay 1
const unsigned long MsecWaterFill = 5000;
      unsigned long msecWater;
enum { DriveOff = LOW,  DriveOn = HIGH };
enum { WaterOff = LOW,  WaterOn = HIGH  };
enum { Idle, Move, Fill };
int    state = Idle;
// -----------------------------------------------------------------------------
void setup () {
    Serial.begin(9600);
    pinMode     (senseWaterStn, INPUT_PULLUP);
    digitalWrite (waterfill,    WaterOff);
    pinMode      (drive,        OUTPUT);
    pinMode      (waterfill,    OUTPUT);
    // start converyor
    digitalWrite (drive,        DriveOn);
    state =  Move;
    Serial.println ("start conveyor");
}
// -----------------------------------------------------------------------------
void loop ()
{
    unsigned long msec = millis ();
    switch (state)  {
    case Idle:
        digitalWrite (waterfill, WaterOff);
        digitalWrite (drive,     DriveOff);
        break;
    case Move:
        if (digitalRead(senseWaterStn) == LOW)  {
            Serial.println ("water station sensor broken - water fill on");
            digitalWrite (drive,     DriveOff);
            digitalWrite (waterfill, WaterOn);
            msecWater = msec;
            state     = Fill;
        }
        break;
    case Fill:
        if (msec - msecWater >= MsecWaterFill)  {
            Serial.println ("water time-out - water fill off, conveyor on");
            digitalWrite (waterfill, WaterOff);
            digitalWrite (drive,     DriveOn);
            state     = Move;
        }
        break;
    }
}