Problema con Relè e MUX... Aiuto!!!!

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);

}

Ciao,
essendo il tuo primo post, ti chiederei di presentarti QUI (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con attenzione il REGOLAMENTO ...

... poi, in conformità al suddetto regolamento, punto 7, edita (in basso a destra del post, bottone More -> Modify) il tuo post e racchiudi il codice all'interno dei tag CODE (... sono quelli che in edit inserisce il bottone fatto così: </>, tutto a sinistra). Grazie. :slight_smile:

Guglielmo