Besoin d'aide Programmation Arduino Urgent

Besoin d'aide Programmation Arduino Urgent - C++ - Programmation

Marsh Posté le 07-06-2016 à 10:20:43    

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


 


Message édité par rahffbourd976 le 08-06-2016 à 11:37:35

---------------
twinx2
Reply

Marsh Posté le 07-06-2016 à 10:20:43   

Reply

Marsh Posté le 07-06-2016 à 13:32:59    

Merci de virer le gras et de mettre le code entre balises http://forum-images.hardware.fr/icones/message/c.gif
Ça serait bien aussi si le texte en bleu contenait un (des) lien(s) pour qu'on ait pas besoin de chercher la doc des modules soi-même.


Message édité par rat de combat le 07-06-2016 à 13:34:13
Reply

Marsh Posté le 08-06-2016 à 11:23:47    

Bonjour ,
 
D'accord voila le code, je m'excuse du retard. [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
 
Pour récapituler, je reçois les séquences (trames venant d'un autre poste , je dois les transformées en mode Modbus RTU pour les envoyées a d'autres module rs485 pour qu'ils puissent piloter les moteurs pas à pas . Il y a 14 moteur, et je reçois ce genre de séquence : M01+03
 
merci de votre aide.  
 
 
 
 

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

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed