Bonjour tout le monde ,

Pourrais je avoir une aide ( voir une exemple ) pour pouvoir fonctionner un programme correctement sil vous plait?
En fait je vous explique " j'ai une carte Arduino Mega + module wifi RN XV + module RS485 + convertisseur rs232 en rs485 " , le but c'est de recevoir
des séquence par wifi par la liaison RS232 en moniteur Série Arduino ( ça c'est fait) , ensuite reprendre ces séquences et les envoyées par
la liaison RS485 modbus RTU ( j'ai des difficulté) . Je ne sais pas comment je dois procédé pour convertir ces séquence qui sont en Hexa en modbus RTU.
Les séquences que je dois recevoir sont de ce genre ( M01-01 ) il y a 14 moteur, je dois faire en sorte que sa le fais automatiquement .
( A mon avis , il dois avoir des CRS a calculé des truc comme ça, or je ne sais pas comment procéder) donc j'ai besoins de votre aide sil vous plait merci.

Voici les liens pour les modules: https://dlnmh9ip6v2uc.cloudfront.ne [...]-XV-DS.pdf
: https://www.arduino.cc/en/Main/ArduinoBoardMega
: http://www.dfrobot.com/wiki/index.php/RS485_Shield
: http://www.esis.com.au/Converters/ic485s.pdf

Je vous poste mon programme , merci de votre aide!


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
String messageRecu;
char bufferTransmissionRS485[256];
int led = 13;
int EN =2 ;//Definition RS485 shield enable terminal (the 2nd digital IO ports),  
//high for the sending state, the low level of receiving state
//déclaration des prototypes des fonctions
int Rs485_Ecrire( char* ptrMessage, unsigned char pNombreOctet);
int Rs485_Lire(char* ptrMessageRecu, unsigned char pNombreOctet);
void setup()
{
    Serial.begin(9600);
    Serial1.begin(9600);
    Serial1.setTimeout(1000);
    Serial.setTimeout(1000);
    pinMode(led,OUTPUT); 
    pinMode(EN,OUTPUT);
} 
void loop()
{
    // variable contenant le caractère à lire
    char reception = 0;
    // variable contenant le nombre de caractère disponibles dans le buffer
    int tailleMessage = 0;
    //recepNombre = Serial1.available();
    while (Serial1.available()) // tant qu'il y a des caractères à lire
     {
        messageRecu = Serial1.readString(); // on lit la chaine  provenant du module Wifi
       // Serial.print(messageRecu); // puis on le renvoi à l’expéditeur tel quel
        //recepNombre = Serial.available(); // on relit le nombre de caractères dispo
     }
     tailleMessage = messageRecu.length();
     if ( tailleMessage != 0)
     {
       messageRecu.toCharArray(bufferTransmissionRS485,tailleMessage);
       Rs485_Ecrire(bufferTransmissionRS485,tailleMessage);
     }
     delay(2000);
     messageRecu="";  //réinitialise le message reçu
 
}// fin fonction loop()
int Rs485_Ecrire( char* ptrMessage, unsigned char pNombreOctet)
{
  int codeRetour=0;
  digitalWrite(EN,HIGH);    //Enable high, RS485 shield waiting to transmit data
  codeRetour = Serial.write(ptrMessage,pNombreOctet);
  delay(pNombreOctet);
  return codeRetour;
}
int Rs485_Lire(char* ptrMessageRecu, unsigned char pNombreOctet)
{
  int codeRetour=0;
   digitalWrite(EN,LOW);    //Enable low, RS485 shield waiting to receive data
   codeRetour=Serial.readBytes(ptrMessageRecu, pNombreOctet);
   return codeRetour;
}