vendredi 23 juin 2017

[Arduino] Communication série (V2.0)


Aujourd'hui je complique un peu les choses. Je me sers de mon ancien programme sur la communication série pour transmettre des valeurs entières (int).

Le plus réside dans le fait que je ne veux pas lire juste une seule données mais, plusieurs (je commence par deux). Dans l'idée, la première valeur contiendra l'information pour allumer une LED. Quant à la seconde valeur, elle pilotera un servomoteur.

J'en profite pour utiliser un tableau à 2 dimensions pour stocker ces 2 valeurs entières.

Exemple de code :

#include<servo.h>    //déclaration de la librairie pour utiliser le servomoteur

//Déclaration variables-paramètres
const int LED = 13;     //contiendra la pin où est attaché la LED
int index_val = 0;    //contient l'index du tableau d'entier
int val[2];    //contient le tableau de valeurs
Servo servo_1;    //déclaration du servomoteur

void setup()
{
    pinMode(LED, OUTPUT);     //initialise la pin (13) LED en sortie
    servo_1.attach(9);     //on connecte le signal de commande à la pin 9 (PWM)
    Serial.begin(9600);     //initialise la communication série à 9600bauds
}

void loop()
{
    index_val = 0;     //mise à jour de la valeur
 
    while(Serial.available() == 0)     //on attend des données
    {
         val[index_val] = Serial.parseInt();     //on convertit la chaîne en entier et l'affecte à "val[0]"
         index_val++;         //on incrémente l'index
         if(Serial.available() != 0)         //si des données sont encore présentes
        {
             val[index_val] = Serial.parseInt();     //on convertit la chaîne en entier et l'affecte à "val[1]"
             index_val++;     //on incrémente l'index (pas nécessaire)
        }

     //Tests
     if(val[0] == 10)
          digitalWrite(LED, HIGH);     //si la valeur vaut 10, on allume la LED
     else
          digitalWrite(LED, LOW);     //si la valeur est différente de 10, on éteint la LED

     servo_1.write(val[1]);     //déplace le servomoteur de la valeur indiquée

     //Affichage des valeurs sur le terminal
      Serial.println(val[0]);
      Serial.println(val[1]);
    }
     //fin du programme
}

Aucun commentaire:

Enregistrer un commentaire