Modbus Arduino comme maître et requête vers esclave module MAX485 TTL

Bonjour,
je galère depuis quelques jours pour faire communiquer mon arduino en tant que maître vers un module combi36 de chez Fidelix http://www.fidelix.se/startsida/vara-produkter/io-moduler/combi-36/
J'ai lu plein de forums, fais des tests dans tous les sens mais je n'arrive pas à récupérer les valeurs de réponse de mon module.
J'ai dans un premier temps fais des tests en utilisant directement le port de communication Serial1 avec les PINs RX1 (18) et TX1 (19) dans ce cas là tout fonctionne j'utilise des commandes brutes Modbus sans utiliser aucune librairie.

int delay_polling =100;

void setup() {
  // put your setup code here, to run once:
  Serial.begin(57600);
  Serial1.begin(57600);
}

void loop() {
  // put your main code here, to run repeatedly:  
  byte message_recu [8];
  byte message_slave1 [] = {0x01, 0x03, 0x00, 0x00, 0x00, 0x01, 0x84, 0x0A};
  byte message_slave2 [] = {0x02, 0x06, 0x00, 0x00, 0x00, 0xFF, 0xC9, 0xB9};
  byte message_slave2_2 [] = {0x02, 0x06, 0x00, 0x00, 0x00, 0x00, 0x89, 0xF9};
  byte message_slave3 [] = {0x03, 0x03, 0x00, 0x00, 0x00, 0x01, 0x85, 0xE8};
  byte message_slave4 [] = {0x04, 0x03, 0x00, 0x00, 0x00, 0x01, 0x84, 0x5F};
  
  Serial1.write(message_slave2, sizeof(message_slave2));
  delay(delay_polling);   
  Serial1.write(message_slave2_2, sizeof(message_slave2_2));
  delay(delay_polling);    
}

Ce code me permet d'allumer toutes les leds présentes présentes sur le combi sur le module digital de 8 sorties (Slave 2), j'écris la valeur 255 (0xFF) avec le CRC qui va bien (0xC9 0xB9) dans le registre 1 de mon module (message_slave2 [] = {0x02, 0x06, 0x00, 0x00, 0x00, 0xFF, 0xC9, 0xB9}:wink:
Pour les éteindre j'écris la valeur 0 (0x00) avec le CRC 0x89 et 0xF9.
(message_slave2 [] = {0x02, 0x06, 0x00, 0x00, 0x00, 0xFF, 0xC9, 0xB9}:wink:

Au niveau du câblage de mon MAX485 le R0 va sur la pin TX1 le DI va sur la pin RX1. VCC vers le 5V et GND vers le GND de l'arduino.

Ma première interrogation c'est que si j'enlève ma pin R0 qui va sur le TX1 les requêtes sont bien envoyées et le code s'exécute. Quel est l'intérêt du R0 ? Cela permet-il de récupérer l'état de la requête savoir si elle a bien été exécutée ou pas ?

Dans un second temps j'ai voulu faire la même chose en utilisant une librairie Modbus. J'ai essayé avec ModbusMaster, ModbusRTU, SimpleModbusMaster, etc. mais je n'ai jamais réussi à lire ni à écrire.

Au niveau du câblage en ayant l'arduino comme maître et mon combi36 comme esclave comment doivent être branchées les PINs ?

Si quelqu'un a un bout de code en ayant pu faire fonctionner cette configuration là je suis preneur.

Merci d'avance à la communauté pour les réponses que vous m'apporterez.

Je reviens vers vous pour vous donner l'état d'avancement.
Premièrement le TX0 et le RX0 sont inversés sur mon Arduino 2560 c'est un modèle chinois et j'ai pu constater la panne en utilisant le RX2 TX2 et RX3 et TX3 qui eux fonctionnent et sont correctement marqués.

Donc le R0 va sur mon RX1, le DI sur mon TX1, le RE DE sont pontés et vont sur la Pin 3 (PWM) de l'arduino.
J'ai donc utilisé la librairie ModbusMaster qui me permet d'écrire sur mon module en utilisant la fonction writeSingleRegister.
Cependant comportement que je ne m'explique pas dès que je branche la pin3 l'envoi de requêtes modbus est interrompu.

Je vais commander un Uno et un Atmega 2560 pour faire des tests complémentaires.

Problème résolu. Lié à ma board Atmega chinoise et mon câblage.
C'est une communication Half Duplex RS485 Modbus il faut donc brancher les pins RE et DE en direct et ne pas les ponter sinon nous n'avons jamais de réponse de l'esclave modbus.
Donc pour les branchements j'ai fais comme ceci en utilisant une board UNO.
Module max485 TTL : R0 vers Rx0, DI vers Tx0, RE pin 2, DE pin 3.
Là tout fonctionne en utilisant l'exemple fournit avec la bibliothèque ModbusMaster et HalfDuplex.