/*
* Date: Nov 01, 2021
*
* Author: Er. Sachin Shrestha
* Client: Er. Bishnu Parajuli, 9851047601
*
* Requirements:
* - Control 6 relays simultaneously based on the individual
* - inputs from the IR sensors. IR sensors give digital output, 0,
* - on detection.
* - Also, the relay should be turned ON for 5 seconds after which
* - it needs to be turned OFF.
* - IR sensors are connected from pin2 to pin7.
* - Relays are connected from pin8 to pin13.
*
* For support, Contact email-id: [email protected]
*/
// input IR sensors pins
const int iRPin1 = 2;
const int iRPin2 = 3;
const int iRPin3 = 4;
const int iRPin4 = 5;
const int iRPin5 = 6;
const int iRPin6 = 7;
// output relay pins
const int relayPin1 = 8;
const int relayPin2 = 9;
const int relayPin3 = 10;
const int relayPin4 = 11;
const int relayPin5 = 12;
const int relayPin6 = 13;
// Initialize variables
int triggerRelay1 = 0, counter1 = 0;
int triggerRelay2 = 0, counter2 = 0;
int triggerRelay3 = 0, counter3 = 0;
int triggerRelay4 = 0, counter4 = 0;
int triggerRelay5 = 0, counter5 = 0;
int triggerRelay6 = 0, counter6 = 0;
// Initialize constant variables
const int delayTimeLoop = 5000;
const int usDelayTime = 850;
const int sensorStateActive = LOW;
const int relayStateON = HIGH;
const int relayStateOFF = LOW;
/* ********** Function declatations ********** */
void CheckIRSensors();
void TriggerRelays();
/* ********** End of Function declatations ********** */
void setup() {
// Initialize ir-input pins
pinMode(iRPin1, INPUT);
pinMode(iRPin2, INPUT);
pinMode(iRPin3, INPUT);
pinMode(iRPin4, INPUT);
pinMode(iRPin5, INPUT);
pinMode(iRPin6, INPUT);
// Initialize relay-output pins
pinMode(relayPin1, OUTPUT);
pinMode(relayPin2, OUTPUT);
pinMode(relayPin3, OUTPUT);
pinMode(relayPin4, OUTPUT);
pinMode(relayPin5, OUTPUT);
pinMode(relayPin6, OUTPUT);
}
void loop() {
CheckIRSensors();
TriggerRelays();
delayMicroseconds(usDelayTime);
}
/* ********** Function Definitions ********** */
void CheckIRSensors(){
if (digitalRead(iRPin1) == sensorStateActive) {
triggerRelay1 = 1;
}
if (digitalRead(iRPin2) == sensorStateActive) {
triggerRelay2 = 1;
}
if (digitalRead(iRPin3) == sensorStateActive) {
triggerRelay3 = 1;
}
if (digitalRead(iRPin4) == sensorStateActive) {
triggerRelay4 = 1;
}
if (digitalRead(iRPin5) == sensorStateActive) {
triggerRelay5 = 1;
}
if (digitalRead(iRPin6) == sensorStateActive) {
triggerRelay6 = 1;
}
}
void TriggerRelays(){
if(triggerRelay1 == 1){
counter1 = counter1 + 1;
if(counter1 < delayTimeLoop){
digitalWrite(relayPin1, relayStateON);
} else{
counter1 = 0;
triggerRelay1 = 0;
}
} else{
digitalWrite(relayPin1, relayStateOFF);
}
if(triggerRelay2 == 1){
counter2 = counter2 + 1;
if(counter2 < delayTimeLoop){
digitalWrite(relayPin2, relayStateON);
} else{
counter2 = 0;
triggerRelay2 = 0;
}
} else{
digitalWrite(relayPin2, relayStateOFF);
}
if(triggerRelay3 == 1){
counter3 = counter3 + 1;
if(counter3 < delayTimeLoop){
digitalWrite(relayPin3, relayStateON);
} else{
counter3 = 0;
triggerRelay3 = 0;
}
} else{
digitalWrite(relayPin3, relayStateOFF);
}
if(triggerRelay4 == 1){
counter4 = counter4 + 1;
if(counter4 < delayTimeLoop){
digitalWrite(relayPin4, relayStateON);
} else{
counter4 = 0;
triggerRelay4 = 0;
}
} else{
digitalWrite(relayPin4, relayStateOFF);
}
if(triggerRelay5 == 1){
counter5 = counter5 + 1;
if(counter5 < delayTimeLoop){
digitalWrite(relayPin5, relayStateON);
} else{
counter5 = 0;
triggerRelay5 = 0;
}
} else{
digitalWrite(relayPin5, relayStateOFF);
}
if(triggerRelay6 == 1){
counter6 = counter6 + 1;
if(counter6 < delayTimeLoop){
digitalWrite(relayPin6, relayStateON);
} else{
counter6 = 0;
triggerRelay6 = 0;
}
} else{
digitalWrite(relayPin6, relayStateOFF);
}
}
/* ********** End of Function Definitions ********** */