Communiquer à arduino plusieurs valeurs sur le port série

Traiter une information plus complexe qu’un seul caractère est tout à fait possible. Voici une des méthodes possibles.

Signalons d’entrée de jeu qu’il existe une méthode proposée dans les exemples de arduino (ReadASCIIString) et décrite dans un article sur le site d’arduino.cc. Elle est efficace et emploie la méthode Serial.parseInt() qui permet de récupérer des valeurs séparées pas des vigules.

Nous proposons une autre méthode, qui nous permettra d’envoyer des données de manière non linéaire.

Pour communiquer avec ce script, on accompagnera chaque valeur d’un index. Par exemple a212, ou d47. Le script récupère l’index et la valeur et exécute alors une opération au choix.

// envoyer des valeurs de manière indépendante vers arduino

int led=13; // une led sur la pin 13
int moteur=6; // un transistor sur la pin 6


void setup() {
 // initialize serial:
 Serial.begin(9600);
 pinMode(led, OUTPUT);
 pinMode(moteur, OUTPUT);

}

void loop() {
 // if there's any serial available, read it:
 while (Serial.available() > 0) {
   int index=Serial.read(); // lire un premier caractère

   // controle éventuel : décommenter pour voir ce qui arrive
   //Serial.print("index : "); Serial.println(index);


   // filtrer : il doit etre une lettre minuscule ou majuscule
   if(index >= 'A' && index <= 'z'){
     int valeur = Serial.parseInt();
     
     // controle eventuel de la valeur
     //Serial.print("valeur : "); Serial.println(valeur);


     // traitement
     switch(index){
     case 'L': // allume/eteint la led en envoyant L1 et L0
       // allume la led si le chiffre est superieur a 0
       if(valeur > 0){
         digitalWrite(led,HIGH);
       }
       else {
         digitalWrite(led,LOW);
       }
       break;


     case 'M': // envoyer de la puissance vers un transistor en envoyant M130 par ex.
       valeur=constrain(valeur,0,256); // eviter les dépassements
       analogWrite(moteur,valeur);
       break;

     }

   }

 }
 delay(10); //pas la peine de tourner à plein régime
}