Pour cela mon microcontroleur envoi sur le port série ceci:
C'est moi qui est choisi le format:
[pos:255] retour a la linge a chaque fois (\n\r)
[stop:1]
[vitesse:44]
[cap:133]
....
J'ai déja tenté et reussi a récuperer et afficher mes données mais je trouve ma technique trop brouillon.
Voici comment je faisais jusque la:
'on enleve les blancs du debut et de la fin
'Text1.Text = Trim(Text1.Text)
Dim a As Variant
a = Split(Text1.Text, vbCrLf) 'je recupere chaque ligne
nb_tableau = UBound(a) ' je compte combien y a de case dans le tableau
'ci dessous je gere le cas ou le tableau est vide, au depart
If nb_tableau = 0 Then
Text3.Text = a(nb_tableau)
Else
'Text3.Text = a(nb_tableau - 1)'je recupere la derniere ligne
End If
Dim b As Variant
b = Split(Text3.Text, "bat1:")
If (UBound(b) = 0) Then
Text3.Text = 0
Else
Text3.Text = b(1)
Text3.Text = Replace(Text3.Text, "[", "")'j'enleve [
Text3.Text = Replace(Text3.Text, "]", "") ' j'enleve ]
End If
Voila comme je fais jusqu’à maintenant,j'aurais aimé que le traitement supporte aussi le cas ou il n'y aurait pas le crocher [ ou ] de séparation car toutes ces données viennent d'un port radio donc il peu y avoir des défaut de transmission
jibob
Messages postés59Date d'inscriptionmardi 10 mai 2005StatutMembreDernière intervention 4 juillet 2013 2 juil. 2013 à 19:19
Bonjour,
Comme tu choisis le format, le mieux c'est d'enlever les crochets qui n'ont pas d'utilité réelle.
Donc traiter ligne par ligne, c'est comme si tu lisais chaque ligne d'un fichier texte, il n'y a pas de difficulté en faisant un Split du caractère séparateur (:)
d'un côté tu isoles le nom de la variable, de l'autre son contenu.
Tu peux ainsi répertorier tous les nom des variables dans une liste pré-établie et il est ensuite facile de leur affecter leur valeur.
Tu peux en premier lieu activer la parité du port série afin de vérifier chaque caractère reçu (ceci garantit qu'un bit unique n'a pas été altéré, mais au delà, la parité peut être juste et néanmoins le caractère altéré).
Reste à fiabiliser la transmission avec un CRC que tu calculerais pour chaque ligne et que tu placerais en début de ligne (ou après le séparateur) de manière à pouvoir le retrouver à coup sûr.
En cas de mauvais CRC, tu jetes la ligne entière car altérée.
zn415
Messages postés62Date d'inscriptionsamedi 23 juin 2007StatutMembreDernière intervention21 novembre 2015 4 juil. 2013 à 04:12
Effectivement je me suis compliqué la vie pour rien, je vais faire comme conseillé.
J'ai déja programmé en php des expression regulieres et j'aurais aimé faire le même genre de chose:
Genre verifier que ma ligne commence bien par 4 lettres comporte un ":" et que aprés ces ":" il y a bien entre 1 et 5 caractere par exemple.
Je vais voir si mon module radio peut supporter la parité et pour le crc c'est une bonne idée.
jibob
Messages postés59Date d'inscriptionmardi 10 mai 2005StatutMembreDernière intervention 4 juillet 2013 4 juil. 2013 à 12:50
Bonjour,
Tu n'as nullement besoin de faire appel aux expressions régulières, car tu sais d'avance ce qui est attendu, à savoir un nom de variable, un séparateur, une chaine CRC, un second séparateur et la chaine de valeur.
Inutile de multiplier les contrôles, vérification de la chaine CRC, si la ligne est OK, décoder le texte de la variable et la valeur puis affecter la valeur à la variable.
Cela se code en quelques lignes et ne nécessite pas de vérifier un format strict puis que le CRC a déjà fait le travail
Au cas où le module radio ne supporterait pas la parité, il suffit de communiquer sur 7 bits, format suffisant pour le code ASCII.
Cordialement.
Ne pas oublier le bouton "Réponse acceptée" pour clore ce sujet