//Set relays int Relay22 = 22; //note switch boolean Relay22State = LOW; int counter22 = 0; int Relay23 = 23; boolean Relay23State = LOW; int counter23 = 0; int Relay24 = 24; //note switch boolean Relay24State = LOW; int counter24 = 0; //Set sensors int Sensor1 = 4; boolean Sensor1State = LOW; int Sensor2 = 5; boolean Sensor2State = LOW; int Sensor3 = 6; boolean Sensor3State = LOW; int Sensor4 = 7; boolean Sensor4State = LOW; int Sensor5 = 8; boolean Sensor5State = LOW; void setup() { //Configure input/output pinMode(Relay22, OUTPUT); pinMode(Relay23, OUTPUT); pinMode(Relay24, OUTPUT); pinMode(Sensor1, INPUT); pinMode(Sensor2, INPUT); pinMode(Sensor3, INPUT); pinMode(Sensor4, INPUT); pinMode(Sensor5, INPUT); } void loop() { //Read all sensors. Note '!' to get HIGH for box and LOW for no box Sensor1State = !digitalRead(Sensor1); Sensor2State = !digitalRead(Sensor2); Sensor3State = !digitalRead(Sensor3); Sensor4State = !digitalRead(Sensor4); Sensor5State = !digitalRead(Sensor5); //Run start/stop state for each engine makeStep(Sensor1State, Sensor2State, Sensor3State, Relay22State, Relay22, counter22); makeStep(Sensor2State, Sensor3State, Sensor4State, Relay23State, Relay23, counter23); makeStep(Sensor3State, Sensor4State, Sensor5State, Relay24State, Relay24, counter24); delay(100); } //A conveyor step moves either when it passes box to next step //or when it recieves a box from previous step void makeStep(bool afterSensor, bool currentSensor, bool beforeSensor, bool& relayState, int relay, int& counter) { if(relayState == LOW) { if((afterSensor == LOW && currentSensor == HIGH) || (currentSensor == LOW && beforeSensor == HIGH)){ digitalWrite(relay, HIGH); relayState = HIGH; } } else { counter++; if(afterSensor == HIGH && currentSensor == HIGH || counter>100){ digitalWrite(relay, LOW); relayState = LOW; counter = 0; } } }