Skyduino:~#
Articles
arduino, programmation

[Arduino] Séparation donnée depuis Serial

Salut à tous !

Cet article fait suite à un topic sur le forum arduino.
Il était demandé de faire un système de récupération de données via le port série.

Les trames série sont de la forme : hello\Sworld le but recherché était de séparer cette trame avec \S comme séparateur (le résultat ici serait Hello et Wolrd).

Le code (avec les commentaires d’origines) :

char buffer[2] = { 
  '\0', '\0'}; // buffer pour stocker le char avant/aprés
char data[8]; // buffer pour stocker les donnée recu
byte index = 0; // index pour le buffer circulaire

void setup(){
  Serial.begin(9600);
  for(int i = 0; i < 8; i++) data[i] = '\0'; // pas de memset sur un microcontrolleur par pitié !
}

void loop()
{
  while(Serial.available() > 0) // tant que des byte sont dispo sur l'uart
  {
    buffer[1] = Serial.read(); // lecture d'un octet depuis le port série
    if ((buffer[0] == '\\') && (buffer[1] == 'S')){ // si les deux char précédant correspondent on quitte
      Serial.println("fin de transmission");
      if(data[0]){
        index--;
        data[index--] = '\0'; // on cloture data avec un char null
        Serial.print("recu : ");
        index = 0; // on reset l'index
        Serial.print(data[index]); // on print le 1er char 
        while((data[index++] != '\0') && (index < 8)) // tant que la fin de data n'est pas atteinte ou d'overflow
          Serial.print(data[index]); // on print le char
        Serial.println(); // on envoie une nouvelle ligne
        index = 0; // on reset l'index
        break;
      }
    }
    if(index < 8){ // on évite les buffer overflow
      data[index] = buffer[1]; // on stock le char
      index++; // et on passe au suivant
    }
    buffer[0] = buffer[1]; // on swap les char avant/aprés
  } // et on repart pour un tour
}

Avec comme résultat coté console pour 012345\S012345\S012345\S

fin de transmission
recu : 012345
fin de transmission
recu : 012345
fin de transmission
recu : 012345
Publicités

Discussion

Pas encore de commentaire.

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

Skyduino devient Carnet du Maker

Le site Carnet du Maker remplace désormais le blog Skyduino pour tout ce qui touche à l'Arduino, l'informatique et au DIY.