Problema com arduinos mestre/escravo com RS485 e comunicação com Node-RED

Estou fazendo um armário inteligente utilizando Node-RED para elaborar o programa e um arduino mega mestre para controlar outros arduinos como escravos que serão responsáveis por abrir as gavetas, além dos relés e solenoides envolvidos no projeto.

Quando estava usando apenas um arduino como protótipo o projeto funcionava certinho, agora que estou acrescentando mais arduino e a comunicação RS485 estou com problemas para funcionar, e nunca fiz nada com esse tipo de comunicação antes.
Troquei o nó no Node-RED responsável por enviar o comando de qual gaveta abrir de um nó Arduino Out para Serial Out, alterei a function que antecede o nó e os códigos dos arduinos, pesquisei como deveria fazer a ligação dos MAX485 e repliquei igualmente. Fiz algum testes com multímetro e tudo parece normal, mas quando tento enviar o comando de abrir a gaveta nada acontece, alguém poderia me ajudar? Aceito novas abordagens também!

Abaixo os códigos dos arduinos, function e as ligações dos equipamento:

Código Arduino Mestre:
"#include <SimpleModbusMaster.h>

#define MAX485_CONTROL 2
#define NUM_ESCRAVOS 8

Packet packets[NUM_ESCRAVOS];
unsigned int modbus_array[NUM_ESCRAVOS];

void preTransmission() {
digitalWrite(MAX485_CONTROL, HIGH);
}

void postTransmission() {
digitalWrite(MAX485_CONTROL, LOW);
}

void setup() {
Serial.begin(9600);
pinMode(MAX485_CONTROL, OUTPUT);
digitalWrite(MAX485_CONTROL, LOW);

// Configuração do ModbusMaster
modbus_configure(&Serial, 9600, SERIAL_8N1, 1000, 200, 3, MAX485_CONTROL, packets, NUM_ESCRAVOS, modbus_array);

}

void loop() {
modbus_update();

if (Serial.available()) {
    String comando = Serial.readStringUntil('\n');

    if (comando.startsWith("ABRIR:") || comando.startsWith("FECHAR:")) {
        int ID_Arduino = comando.substring(6, 7).toInt();
        int Pino_Gaveta = comando.substring(8).toInt();

        if (comando.startsWith("FECHAR:")) {
            Pino_Gaveta = -Pino_Gaveta;
        }

        if (ID_Arduino >= 1 && ID_Arduino <= NUM_ESCRAVOS) {
            modbus_array[ID_Arduino] = Pino_Gaveta; 
        }
    }
}

}"

Código Arduinos Escravos:
"#include <SimpleModbusSlave.h>

#define MAX485_CONTROL 2
unsigned int holdingRegs[2];
void setup() {
Serial.begin(9600);
pinMode(MAX485_CONTROL, OUTPUT);
digitalWrite(MAX485_CONTROL, LOW);

for (int i = 2; i <= 41; i++) {
    pinMode(i, OUTPUT);
}
modbus_configure(&Serial, 9600, SERIAL_8N1, 1, 2, 0, holdingRegs);

}

void loop() {
modbus_update(); // Processa mensagens Modbus

int comando = holdingRegs[1]; 

if (comando >= 2 && comando <= 41) { 
    digitalWrite(comando, HIGH);  
} 
else if (comando <= -2 && comando >= -41) { 
    digitalWrite(-comando, LOW); 
}

holdingRegs[1] = 0;

}"

Function antes do nó Serial Out:
"var gavetas = {
“B01.C31”: { ID_Arduino: 1, Pino_Gaveta: 5 }, //(Sim as gavetas são essas stings e não são enumeradas
// Depois vou acrescentar as gavetas
};
var codigoGaveta = global.get(‘gaveta’);
var acao = “ABRIR”;

if (gavetas[codigoGaveta]) {
var ID_Arduino = gavetas[codigoGaveta].ID_Arduino;
var Pino_Gaveta = gavetas[codigoGaveta].Pino_Gaveta;

var comando = acao + ":" + ID_Arduino + "," + Pino_Gaveta + "\n";

msg.payload = comando;
return msg;

} else {
node.warn(“Código da gaveta não encontrado!”);
return null;
}"

Configuração Serial Out:

Ligações: