Hi to everybody,
I have a problem at my home with Arduino Mega, 2 Mux (1 for input and 1 for output) e 3 shields with 16 relay for everyone.
When I switch on 1 relay in a shield and then switch on another one on an other shield they sometime shut off, sometime switchon another relay and so on.
I post the code, maybe there is a problem with mux digital write, i don't know.
Please help because this circuit doesn't Work in my home and my Wife wants kill me ![]()
void relayControl(int* digitalVals, int* relayType, int* relayVals, unsigned long* relayTimes, int chan)
{
for (int i=0; i<16; i++)
{
digitalVals[i] = muxShieldInput.digitalReadMS(chan, i);
switch(relayType[i])
{
case 0:
{
if((digitalVals[i] != relayVals[i]))
{
relayVals[i] = digitalVals[i];
muxShieldOutput.digitalWriteMS(chan, i, !digitalVals[i]);
}
break;
}
case 1:
{
if(digitalVals[i] == 0)
{
break;
}
if(relayVals[i] == 0)
{
if(digitalVals[i] == 1)
{
relayVals[i] = 1;
muxShieldOutput.digitalWriteMS(chan, i, relayVals[i]);
}
}
else if(relayVals[i] == 1)
{
if(digitalVals[i] == 1)
{
relayVals[i] = 0;
muxShieldOutput.digitalWriteMS(chan, i, relayVals[i]);
}
}
delay(1000);
break;
}
case 2:
{
if(digitalVals[i] == 1)
{
if(relayVals[i + 1] == 1)
{
muxShieldOutput.digitalWriteMS(chan, i, HIGH);
muxShieldOutput.digitalWriteMS(chan, i + 1, HIGH);
relayVals[i + 1] = 0;
delay(1000);
break;
}
if(relayVals[i] == 1)
{
muxShieldOutput.digitalWriteMS(chan, i, HIGH);
muxShieldOutput.digitalWriteMS(chan, i + 1, HIGH);
relayVals[i] = 0;
}else{
muxShieldOutput.digitalWriteMS(chan, i, LOW);
muxShieldOutput.digitalWriteMS(chan, i + 1, HIGH);
relayTimes[i] = millis();
relayVals[i] = digitalVals[i];
}
delay(1000);
break;
}
}
case 3:
{
if(digitalVals[i] == 1)
{
if(relayVals[i - 1] == 1)
{
muxShieldOutput.digitalWriteMS(chan, i, HIGH);
muxShieldOutput.digitalWriteMS(chan, i - 1, HIGH);
relayVals[i - 1] = 0;
delay(1000);
break;
}
if(relayVals[i] == 1)
{
muxShieldOutput.digitalWriteMS(chan, i, HIGH);
muxShieldOutput.digitalWriteMS(chan, i - 1, HIGH);
relayVals[i] = 0;
}else{
muxShieldOutput.digitalWriteMS(chan, i, LOW);
muxShieldOutput.digitalWriteMS(chan, i - 1, HIGH);
relayTimes[i] = millis();
relayVals[i] = digitalVals[i];
}
delay(1000);
break;
}
}
}
}
}
void loop() {
tapparellaTimeCheck(IO1RelayType, IO1RelayTimes, IO1TapparellaDelay, 1);
tapparellaTimeCheck(IO2RelayType, IO2RelayTimes, IO2TapparellaDelay, 2);
tapparellaTimeCheck(IO3RelayType, IO3RelayTimes, IO3TapparellaDelay, 3);
relayControl(IO1DigitalVals, IO1RelayType, IO1RelayVals, IO1RelayTimes, 1);
relayControl(IO2DigitalVals, IO2RelayType, IO2RelayVals, IO2RelayTimes, 2);
relayControl(IO3DigitalVals, IO3RelayType, IO3RelayVals, IO3RelayTimes, 3);
}
