From t-o-f

Arduino: Exemple d'un potentiomètre et de la communication ASCII

Contents (hide)

  1. 1. Description
  2. 2. Code Arduino
  3. 3. Recevoir les messages dans le «Serial Monitor»
  4. 4. Recevoir les messages dans Max
  5. 5. Recevoir les messages dans Processing
  6. 6. Envoyer plusieurs données

1.  Description

L'Arduino effecture une lecture de la broche analogique 0 et envoie la valeur sous forme de message ASCII.

2.  Code Arduino

/*
Description
=============
L'Arduino effectue a chaque 20 ms une lecture
de la broche analogique 0 et
envoie la valeur sous forme de message ASCII.

Le message ASCII est compose des elements suivants:
* en-tete (A0) suivi d'un espace
* la valeur
* indicateur de fin de ligne


Circuit
=============
Broche analogique 0: potentiometre.




Thomas Ouellet Frederics, 4 novembre 2012
*/

unsigned long previousMillis;
unsigned long interval = 20;



void setup() {



        // Demarrer la communication serie a  57600 baud.
        Serial.begin(57600);

}

void loop() {

        // Verfier si au moins 20 millisecondes se sont ecoulees
        // depuis le dernier envoi.
        if ( millis() - previousMillis >= 20 ) {
                previousMillis = millis();

                // Lire la valeur du potentiometre.
                int valeur = analogRead(0);

                // Envoyer la valeur du potentiometre.
                Serial.print("A0 "); // en-tete (A0) suivi d'un espace
                Serial.print(valeur); // la valeur
                Serial.println(); // indicateur de fin de ligne

                /* //Le bloc precedent peut aussi etre ecrit ainsi:
                Serial.print("A0 "); // en-tete (A0) suivi d'un espace
                Serial.println(valeur); // la valeur suivi de l'indicateur de fin de ligne
                */

        }
}

3.  Recevoir les messages dans le «Serial Monitor»

4.  Recevoir les messages dans Max

<pre><code>
----------begin_max5_patcher----------
1678.3oc6Z0saaaCE95jmBBeia.xHD+QRT6p00ALTfNrK5kqEExRzNrUlzkR
JKoE8co2skcwdI7K1NjxxVtwVwN0IcFnv.9GJJxy46722gxe7zSFLxbkrb.5
GQ+A5jS93ombheH2.mr32mLXZ5UYEok9oMHyLcpTWM37lqUIupxO9KRQYWjN
+e0RjTilJKKSmHQ+V5U31oN1NYjapA3fEiLKsJ6BkdxarxrpFgHQfCh4rD94
HNifEBNMN9bDUDB2EhB2K50KtaUteiMid6ODtbOL5Jc5To+JO0pRKZuhtdpR
WHq7ZAY0fl5p1QC5rHkpO3WDBEG3F8Smdp6sy+JQomYzWJsUJKpPVhzloirv
m.f0hcO8kO64O+9CYAw3fj.gfbmPF8XAx9Uqodl7V.VgprRhdxGJPSbS3Ljr
xOEo9Ry0toarkuuVBiAXqZ7XqDQXHYILqZzSJkE.9gHAvfmsDtKTZYloV62X
58zFv3Q33n.FIboMfw1rMfkbrXDdg79GRGywwgzfHv8LNBGvXAzyQjvf97NY
+uKhdg5eKjgRPAC1txSIdMNTzn8hvDdBjOqQ6Ihsn8j8T6oaT6IaQ6WLbyLq
tdlrQTGL.856Avnk+IHy2BWFaMSKud5HSQOnC..ggrXJc8r8wrdybcXhZ9lh
NpJSZe3RLNlBu9hT5Plk9vEwdhKrCBtnboKOfPS2Ty6.DQWOiab+E8hOHPDa
OgnQo5ICNe0mGT7psB3NhUBFNILfGj.Ig5OLK5fjDhtugY2a7omZWyrxoJfT
PpcRsaNnbfX.PX0cuRzvRoSoFhxmeSkzBpjm1vLisBUN+FqRhl+Yjo9RKvaK
s1MsooVKTM.idkFV9bY8Up4+8T+7f0HcTgigWJ5RUkzsCOYTZc9YtcMyn0xq
TFs6V+o7JKhfRypTW52R2uyjn2Wq7LUzyuIyU1QYcRSs6Z1pTP7JQYoVXoQO
0lWqzlMyfIZepRSBEXJgKb4bnbvyfGx4dZj9jNh3s3kbzP8920dtgfwrViF5
BEG1.piM1Lo2bUBVbkybVhxA6z7afuXky+qZ3yYo1kNJG.BiBJNhEwbU9Rhw
g.XGBDjXQA8wWjxNB4KNzEGAPMDXI8AdYWXTk9Nf5FhsebJITJVjDEIXtDXB
bbBiEAo+Ygz9xoQRNVnU5Ql9nH.IucNPgN.fP742ibzEH8QrjHNhHVtMeqeo
I8qukPzTHcq0reNOfORRBIl6nKPWF6cGcjPhNVh8HmgdVgB580hJgzaCmYAJ
ZKx0spBmG8FYzqEC9JM8LzKmeiiAFTiR5qF4mfrI640oPwSOtudzMT2qXH.S
PD9xjjPAN1YnUVKotrFpG5t6gPp.qYK4QY6isjywt1qhg9qRvg.yFVhijCEC
wFQ7XWWWawdxOJyktvVtHY5vzwiUYWzXL0lo9RWNKRYKwk7Tcoqz1Xod9+TA
7HFB8ueHJfQH9i7f2zLeBf2wwQwNx3r9JgQBNZx.6f5A6TVDRTHVrT+6KAr3
3uw9lvaTJJD54J.0vgc2Z9fxS7oac7JIzd6T6vjskdO5k8P2e168455GhhVB
QcHCBDx6Af3eS7j7cvduPmJyjIExcCD5TUl1+wD1qu.PYGvEnd2ajZnkLY2D
GaFFNbGtgy7OptpxnaEwKTMYYGzCFvhVdZg6LFP5oCLzOaJxau7HiMWZ+BP3
1nlEJGjK8qeT2J.aGKc5ZlovXaTh.Lim3JKb6uP5nBKCP5ZD2vgrLZRm01yt
M.GKDTVn6a7X.sDquxiRyd2DuZrUWbFtqvatTZWSA7xb6acWZ0DsALWEpr20
csaf10VBub19V2kXym3w4O59ZcdjEc6f5Nb1XG4Nazu6r8M1YqKYo9c1RN1c
1He2YayNa9aw27wW7eOv653FecOvRn20r1UcQgezpMF55oRoScsr1YN70lyE
p7botqwMWU5r2dnbyMNrqRCeGjlnGMoIZGjF2CB4QRbbm4zWM5LUkOy.tQKb
WhXXR6gewCvBhfvcDkhwzksZzN7pc9foRODZDEya6lTHfNKSRDgqoQqF9APi
79Cj6xoYO0ovvkBOKliSngQzj0zoUC+PoSzCrNIXqI7blHfbacpY3GBcZmBt
EOZA2zcITv8.6erjmjcPdb+8J53rem1bJPdo8eo.Pbv0fVDjsIhfCa+qcrb3
6zl2T5Kc1Lnxb4B4xqN.Mq21Tj0+b6.gP27Seo3AV4kp146IPLH0Brrp.JV0
1FhQWIhFbpae9zo+GU1cbYC
-----------end_max5_patcher-----------
</code></pre>

5.  Recevoir les messages dans Processing

import processing.serial.*;

// Lorsque vous demarrez ce code, tout les ports
// series sont affiche dans la fenaªtre de deboguage.
// Changer la chaine suivante pour qu'elle
// corresponde au nom de votre port serie.
String portName = "/dev/tty.usbmodemfd131";

// Declarer une instance de la classe Serial:
Serial serial;


int A0;

void setup() {
        size(256, 256);
        smooth();


        println(Serial.list()); // Affiche les noms des ports.

        // Creer une instance de la classe Serial avec
        // une vitesse de 57600 baud:
        serial = new Serial(this, portName, 57600);

        // Indiquer a  l'instance serial de lancer la fonction serialEvent
        // lorsque l'octet 10 est recu. L'octet 10 est envoye par
        // Serial.println() pour terminer le message:
        serial.bufferUntil(10);

        textAlign(LEFT,TOP);
}

// Definir une fonction pour recevoir les donnees du port serie:
void serialEvent(Serial p) {

        // Lire le message.
        String chaine = p.readString();

        // Separer les elements du message
        // selon les espaces:
        String[] elements = splitTokens(chaine);

        // S'assurer qu'il y a bien deux mots
        // dans le message et ensuite attribuer
        // la valeur a  la bonne variable selon
        // l'identifiant:
        if ( elements.length == 2 ) {
                if ( elements[0].equals("A0") ) {
                        A0 = int(elements[1]);
                }

        }

}

void draw() {
        background(0);
        text("A0: "+ A0, 20, 10);
        rect(0,30,A0/1024.*width,20);

}

6.  Envoyer plusieurs données

L'extrait de code embarqué suivant envoie la valeur de trois entrées analogiques sur des lignes différents:

Serial.print("A0 "); // en-tete (A0) suivi d'un espace
Serial.print(analogRead(0)); // la valeur
Serial.println(); // indicateur de fin de ligne

Serial.print("A1 "); // en-tete (A1) suivi d'un espace
Serial.print(analogRead(1)); // la valeur
Serial.println(); // indicateur de fin de ligne

Serial.print("A2 "); // en-tete (A2) suivi d'un espace
Serial.print(analogRead(2)); // la valeur
Serial.println(); // indicateur de fin de ligne
Récupéré sur http://wiki.t-o-f.info/Arduino/ExemplePotentiom%c3%a8treASCII
Page mise à jour le 16 November 2013 à 21h39