// 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;
}
}