Buongiorno a tutti,
ho un problema nella domotica di casa con Arduino Mega, 2 Mux (1 per uscite e 1 per entrate) e 3 piastre di relè da 16 ognuna.
Quando accendo un relè in una, spegne i relè nell'altra e si comporta in modo anomalo, vi posto il codice in modo da chiedervi una mano. Grazie a tutti
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);
}