Hi! I'm trying to create a system that when one button is pressed, multiple relays trigger.
The project is for a set of doors that when certain doors open, certain ones lock, there's a total of 7 doors.
Logic Table
1- 2,4
2- 1,3,4
3- 2,7
4- 1,2,5
5- 4,6
6- 5,7
7- 6,3
(Ex. When door 1 activates, doors 2 and 4 lock)
THE ISSUE
When pressing certain buttons, either all, some, or none, of the relays trigger. Although whenever having the buttons and relays go 1 to 1 (One button activates one relay) it works fine.
HARDWARE
-Arduino MEGA2560
-8-Relay board (Has 817 Optoisolators)
CODE
const int Relay1 = 41;
const int Relay2 = 42;
const int Relay3 = 43;
const int Relay4 = 44;
const int Relay5 = 45;
const int Relay6 = 46;
const int Relay7 = 47;
int val = 0;
//Divide
const int Door1 = 31;
const int Door2 = 32;
const int Door3 = 33;
const int Door4 = 34;
const int Door5 = 35;
const int Door6 = 36;
const int Door7 = 37;
void setup() {
pinMode(Relay1, OUTPUT);
pinMode(Relay2, OUTPUT);
pinMode(Relay3, OUTPUT);
pinMode(Relay4, OUTPUT);
pinMode(Relay5, OUTPUT);
pinMode(Relay6, OUTPUT);
pinMode(Relay7, OUTPUT);
pinMode(Door1, INPUT);
pinMode(Door2, INPUT);
pinMode(Door3, INPUT);
pinMode(Door4, INPUT);
pinMode(Door5, INPUT);
pinMode(Door6, INPUT);
pinMode(Door7, INPUT);
digitalWrite(Relay1, HIGH);
digitalWrite(Relay2, HIGH);
digitalWrite(Relay3, HIGH);
digitalWrite(Relay4, HIGH);
digitalWrite(Relay5, HIGH);
digitalWrite(Relay6, HIGH);
digitalWrite(Relay7, HIGH);
}
void loop() {
val = digitalRead(Door1); //Set1
if (val == HIGH) {
digitalWrite(Relay2, HIGH);
digitalWrite(Relay4, HIGH);
} else {
digitalWrite(Relay2, LOW);
digitalWrite(Relay4, LOW);
}
//Logic Break------------------------------------------------------
val = digitalRead(Door2); //Set 2
if (val == HIGH) {
digitalWrite(Relay1, HIGH);
digitalWrite(Relay3, HIGH);
digitalWrite(Relay4, HIGH);
} else {
digitalWrite(Relay1, LOW);
digitalWrite(Relay3, LOW);
digitalWrite(Relay4, LOW);
}
//Logic Break------------------------------------------------------
val = digitalRead(Door3); //Set 3
if (val == HIGH) {
digitalWrite(Relay2, HIGH);
digitalWrite(Relay7, HIGH);
} else {
digitalWrite(Relay2, LOW);
digitalWrite(Relay7, LOW);
}
//Logic Break------------------------------------------------------
val = digitalRead(Door4); //Set 4
if (val == HIGH) {
digitalWrite(Relay1, HIGH);
digitalWrite(Relay2, HIGH);
digitalWrite(Relay5, HIGH);
} else {
digitalWrite(Relay1, LOW);
digitalWrite(Relay2, LOW);
digitalWrite(Relay5, LOW);
}
//Logic Break------------------------------------------------------
val = digitalRead(Door5); //Set 5
if (val == HIGH) {
digitalWrite(Relay4, HIGH);
digitalWrite(Relay6, HIGH);
} else {
digitalWrite(Relay4, LOW);
digitalWrite(Relay6, LOW);
}
//Logic Break------------------------------------------------------
val = digitalRead(Door6); //Set 6
if (val == HIGH) {
digitalWrite(Relay5, HIGH);
digitalWrite(Relay7, HIGH);
} else {
digitalWrite(Relay5, LOW);
digitalWrite(Relay7, LOW);
}
//Logic Break------------------------------------------------------
val = digitalRead(Door7); //Set 7
if (val == HIGH) {
digitalWrite(Relay6, HIGH);
digitalWrite(Relay3, HIGH);
} else {
digitalWrite(Relay6, LOW);
digitalWrite(Relay3, LOW);
}
}
