Bonjour tout le monde, je rencontre un leger problème, j'ai une balance éléctronique qui m'envoie la masse (1g à 6000g à 1g près) via une sortie RS232 sous forme de tableau ASCII.
J'ai déjà réussi à recuperer ces données et à les afficher via le code suivant :
#include <SoftwareSerial.h>
#define RX (10)
#define TX (11)
SoftwareSerial mySerial(RX, TX);
char Balance[18];
int i=0;
void setup()
{
Serial.begin(115200);
mySerial.begin(9600);
}
void loop()
{
if (mySerial.available())
{
for(i=0;i<18;i++)
{
Balance[i] = mySerial.read();
Serial.write(Balance[i]);
}
delay (500);
}
}
Ce qui me donne dans le moniteur série :
ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿN: 134g
ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿN: 134g
ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿN: 134g
ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿN: 138g
ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿN: 139g
ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
Comme vous pouvez le voir, je réussi à récuperer la masse. Dans la doc de la balance, il est indiqué qu'elle envoie les données sous cette forme :
B* B B B B B B B B 0 . 0 B g B B CR LF
( B* = Blanc ou M; B/0/. = Blanc/valeur de poids/point décimal; g = Unité de poids; CR = Retour de chariot; LF = Avance de ligne)
J'ai d'abord essayé de ne traiter les données qu'à partir du 10ème caractère jusqu'au 13ème, sans succès.
J'ai aussi tenté dans ma boucle for d'ajouter dans un autre tableau tous "balance*" qui correspondent à un nombre avec le code suivant :*
* *for(i=0;i<18;i++) { balance[i] = mySerial.read(); if (balance[i] >= 0x48 && balance[i] >= 0x57) { poidsTab[i]=balance[i]; Serial.write(poidsTab[i]); } }* *
Mais dans le moniteur série je ne récupère qu'un simple "g" pour chaque pesée.
Après avoir effectué quelques recherches j'ai tenté d'utiliser la fonction atoi() mais comme pour le reste, je n'ai rien obtenu de satisfaisant...
Du coup, je ne sais plus trop quoi faire pour avoir cette masse dans une variable de type integer.