Photo de 'Gérer des transmissions de variables par port série'

Gérer des transmissions de variables par port série

Par Victor SUEUR le 21/05/2019

La transmission de données par port série peut, à premier abord, paraître compliqué. Cependant, la mise en œuvre peut être très simple quand on connaît les astuces. Je vais ici vous présenter deux solutions, assez polyvalentes, et compatible avec tout les xBees:

Transmissions de valeurs

La première partie de cet article vous montre comment transmettre des variables de type entier ou flottant. Je vais vous présenter le code, que nous analyserons après.

while (Serial.available() > 0) {
      char index = Serial.read();     
      if (index >= 'A' && index <= 'z') { 
            int valeur = Serial.parseInt(); 
            switch (index){
                case 'A':
                      index_A = valeur;
                break;

               case 'B':
                 index_A= valeur;
               break;
            }
     }
}

Première ligne:

while (Serial.available() > 0) {

Cette ligne fait répéter la réception tant que le buffer (Une sorte de mémoire) n'est pas vide, c'est à dire que des données reçues n'ont pas étées lues.

char index = Serial.read();

Cette ligne permet de lire le premier caractère de la transmission entrante, et de le stoquer dans la variable index if (index >= 'A' && index <= 'z') {

Cette ligne permet de s'assurer que l'index est bien une lettre. Elle vérifie que le code ASCII de l'index est bien compris dans la plage des lettes. Si oui, la fonction continue de s'éxecuter.

int valeur = Serial.parseInt();

Cette ligne récupère la valeur qui suit l'index, mais elle s'attend à trouver une valeur entière. Si vous voulez transmettre une valeur à virgule flottante, (type float), vous devez la modifier comme il suit:

float valeur = Serial.parseFloat();

Le reste du code est un classique "switch-case". Pour ajouter une variable à transmettre, il vous faut ajouter un case avec l'index et la valeur à attribuer. Attention: Toutes les variables doivent avoir un index différent.

Et du coté émetteur?

Vous ne trouvez pas? vous allez voir, c'est très simple: Serial.print(index); ou Serial.print("A"); suivi de Serial.println(valeur);

Et voilà!

Transmissions de chaînes de caractères:

Le code est:

String chaine;
while (Serial.available()) {  //création du string à partir de la lecture du port série
      char c = Serial.read();
      chaine= String(chaine + c);
      count=1;
  }

Je ne vais décrire que deux lignes car les autres ont été vues au dessus:

String chaine : Créer une chaîne de caractère

chaine = String(chaine+c) : On fusionne la chaîne de caractères et le dernier caractère reçu.

Coté émmeteur, on envoie simplement la chaîne de caractère via Serial.println().

Voilà, vous pouvez transmettre des variables par transmission série!

Rédaction: V.S.


Commentaires

Les commmentaires ne sont pas actifs