[Roboclaw] Utilisation de SoftwareSerial et BMSerial [Arduino Uno]

Bonjour à tous !

Je me permets de poster un message car j’aurais grandement besoin d’aide afin de pouvoir conclure mon projet d’étude.
En effet, j’ai réalisé un programme principal comprenant un capteur de poids, un module bluetooth, un shield RS232, un lecteur RFID et une carte Roboclaw 2x5A.

Mon programme principal marche très bien. J’utilise dans ce programme la librairie BMSerial qui est la librairie SoftwareSerial adaptée par Roboclaw (Orion/Pololu).

Il me reste à intégrer mon programme faisant l’acquisition des valeurs de mon capteur de poids.
Voici ce programme tout simple :

//#include <BMSerial.h>
#include <SoftwareSerial.h>

//#pragma GCC diagnostic ignored "-Wwrite-strings"

String chaine1;
String test;
int data;
int i = 0;


//BMSerial Poids(7, 6); // RX, TX
SoftwareSerial Poids(7, 6); // RX, TX

void setup()
{
  Poids.begin(38400);
  Serial.begin(38400);
  Serial.println("Test AD104C - Initialisation");
  delay(5);
}

float HBM()
{ chaine1 = "";
  test    = "";
  data = 0;

   Poids.write("MSV?\r\n");

  while (Poids.available() == 0) {} // bloque si pas de DATA / 0 = NULL

  while (Poids.available() != 0)    // on rentre dans la boucle si on a des DATA (10 = LF et 13 = CR)
  {
    data = Poids.read();
    chaine1 += data;
  }
   //Serial.print(chaine1);
  test = chaine1.substring(16, 20); // on repere les erreurs rencontrées
  if (test.equals("1310"))          // taille trame conforme = on affiche pas si

  { chaine1 = chaine1.substring(0, 20);         // on enleve les CR LF de fin de trame
    int poids = 0;
    poids = 1000000 * ((chaine1.substring(2, 4)).toInt() - 48) + 100000 * ((chaine1.substring(4, 6)).toInt() - 48) + 10000 * ((chaine1.substring(6, 8)).toInt() - 48) + 1000 * ((chaine1.substring(8, 10)).toInt() - 48) + 100 * ((chaine1.substring(10, 12)).toInt() - 48) + 10 * ((chaine1.substring(12, 14)).toInt() - 48) + 1 * ((chaine1.substring(14, 16)).toInt() - 48);
    return (float)(poids/10.0);
  }
}

void loop()
{
  Serial.println(HBM());
}

Ainsi, si j’utilise la librairie SoftwareSerial, tout fonctionne très bien et les valeurs s’affiche dans le terminal.
Mais si je commente et que j’utilise BMSerial, rien ne fonctionne et j’ai cette erreur :

final_AD104C.ino: In function 'float HBM()':
final_AD104C:24: error: invalid conversion from 'const char*' to 'uint8_t {aka unsigned char}' [-fpermissive]
In file included from final_AD104C.ino:1:0:
/Users/coste/Documents/Arduino/libraries/BMSerial/BMSerial.h:110:17: error:   initializing argument 1 of 'virtual size_t BMSerial::write(uint8_t)' [-fpermissive]
  virtual size_t write(uint8_t byte);
                 ^
invalid conversion from 'const char*' to 'uint8_t {aka unsigned char}' [-fpermissive]

J’ai donc pensé à rajouter cette ligne de code dans le fichier .h de BMSerial :

using Print::write;

Ainsi, tout ce compile sans erreur et je peux téléverser, mais aucune valeur ne s’affiche. Je pense donc avoir un problème avec la fonction WRITE.

Pouvez-vous m’aider s’il vous plait ?

Je vous remercie par avance !

Libraire BMSerial : BMSerial Github

un capteur de poids, un module bluetooth, un shield RS232, un lecteur RFID et une carte Roboclaw 2x5A.

Bonjour,
il est peut-être impossible de faire fonctionner ces softs simultanément ...

Merci beaucoup pour votre réponse trimarco232.

Pour l'instant, j'ai un programme principal où tout fonctionne mais où je ne récupère pas la valeur de mon capteur de poids.
Mon programme principal fonctionne avec la librairie BMSerial.

Mon programme pour le poids fonctionne très bien également mais avec la librairie SoftwareSerial.

Je pense effectivement que ces 2 librairies ne sont pas compatibles car BMSerial découle de SoftwareSerial.
Néanmoins il faudrait que je trouve une alternative (modifier le code de BMSerial, trouver une librairie simple alternative,...) qui me permettrait d'écrire sur mon port série la commande "MSV?\r\n" pour avoir la valeur de poids en retour :confused:

Auriez-vous une idée de ce que je pourrais faire ?

EDIT :

J'ai fais un test : il existe une commande avec mon capteur de poids qui est "MSV?0\r\n"
Cette commande, si elle est écrite une fois, permets de lire en continu la valeur du capteur, donc sans avoir besoin de renvoyer une commande "MSV?\r\n" en permanence.
J'ai donc compilé mon programme qui fonctionne (avec SoftwareSerial) et j'avais donc les valeurs en continue qui défilaient sur mon terminal. Jusqu'ici tout va bien.
J'ai ensuite compilé mon programme avec BMSerial. Je n'ai donc plus besoin de venir écrire sur mon port mais simplement de venir lire les valeurs qui me parviennent et là : Aucune valeur.
Ma valeur de retour est toujours constante et nulle : 0.00, mais est égale en valeur brute à "1604817648152144176149141138". Et si je mets une masse sur mon capteur, j'ai des fois les caractères "ovf" qui apparaissent.

Ce n'est peut être donc pas un soucis de Write ...
Je vous remercie par avance de votre aide.

Clément

dans mon esprit (mais je n'ai rien vérifié ... ) le souci viendrait du fait que les 2 librairies tournent simultanément.
il faudrait les utiliser à tour de rôle :

  • écriture + lecture puis arrêt dans le programme principal
    puis :
  • écriture + lecture puis arrêt dans le programme poids

et rebelote etc.