Arduino > Communication série en ASCII
Contents (hide)
Pour envoyer un message ASCII d'une carte Arduino, il faut d'abord initialiser une communication série à une vitesse(baud) que nous déterminons avec la commande Serial.begin(). Il faut ensuite utiliser les diverses formes des commandes Serial.print() et Serial.println() .
Pour déboguer la communication série, on peut ouvrir le «serial monitor» du logiciel Arduino:
Pour envoyer la valeur mesurée à l'entrée numérique 2 nous utilisons le code suivant:
Afficher/cacher le code
/* Exemple de base de communication ASCII. Version numérique. Réalisé par Thomas O Fredericks. */ int interval = 20; // Intervalle de temps entre deux envois de message. int val; void setup() { // Initialiser la communication série à 57600 baud. Serial.begin(57600); } void loop() { // Exécuter le code suivant seulement si l'intervalle de temps // s'est écoulé: delay(interval); int newval = digitalRead(2); // Lecture de la broche numérique 2. // Envoyer la valeur seulement si elle est différente: if ( newval != val ) { val = newval; // Construction du message: Serial.print("d2"); // Envoi de la chaîne de caractères "d2" pour identifier la valeur. Serial.print(' '); // Envoi du caractère «espace» pour séparer l'indentifiant de la valeur. Serial.print(val, DEC); // Envoi de la valeur. Serial.println(); // Envoi de l'indicateur de terminaison du message (retour à la ligne et retour de chariot) } }
Pour envoyer la valeur mesurée à l'entrée analogique 0 nous utilisons le code suivant:
Afficher/cacher le code
/* Exemple de base de communication ASCII. Version analogique. Réalisé par Thomas O Fredericks. */ int interval = 20; // Intervalle de temps entre deux envois de message. int val; void setup() { // Initialiser la communication série à 57600 baud. Serial.begin(57600); } void loop() { // Exécuter le code suivant seulement si l'intervalle de temps // s'est écoulé. delay(interval); int newval = analogRead(0); // Lecture de la broche analogique 0. // Envoyer la valeur seulement si elle est différente: if ( newval != val ) { val = newval; // Construction du message: Serial.print("a0"); // Envoi de la chaîne de caractères "a0" pour identifier la valeur. Serial.print(' '); // Envoi du caractère «espace» pour séparer l'indentifiant de la valeur. Serial.print(val, DEC); // Envoi de la valeur. Serial.println(); // Envoi de l'indicateur de terminaison du message (retour à la ligne et retour de chariot) } }
Pour envoyer la valeur mesurée à l'entrée analogique 0 et à l'entrée numérique 2 nous utilisons le code suivant:
Afficher/cacher le code
/* Exemple de base de communication ASCII. Version analogique et numérique. Réalisé par Thomas O Fredericks. */ int interval = 25; // Intervalle de temps entre deux envois de message. unsigned long timeStamp; int a0; int d2; void setup() { // Initialiser la communication série à 57600 baud. Serial.begin(57600); } void loop() { // Exécuter le code suivant seulement si l'intervalle de temps // s'est écoulé: if ( millis() - timeStamp >= interval ) { // Mettre en mémoire le temps présent pour calculer le // prochain intervalle: timeStamp = millis(); int newval = analogRead(0); // Lecture de la broche analogique 0. // Envoyer la valeur seulement si elle est différente: if ( newval != a0 ) { a0 = newval; // Construction du message: // Envoi de la chaîne de caractères "a0" pour identifier la valeur: Serial.print("a0"); // Envoi du caractère «espace» pour séparer l'indentifiant de la valeur: Serial.print(' '); // Envoi de la valeur: Serial.print(a0, DEC); // Envoi de l'indicateur de terminaison du message // (retour à la ligne et retour de chariot): Serial.println(); } newval = digitalRead(2); // Lecture de la broche numérique 2. // Envoyer la valeur seulement si elle est différente: if ( newval != d2 ) { d2 = newval; // Construction du message: // Envoi de la chaîne de caractères "d2" pour identifier la valeur: Serial.print("d2"); // Envoi du caractère «espace» pour séparer l'indentifiant de la valeur: Serial.print(' '); // Envoi de la valeur: Serial.print(d2, DEC); // Envoi de l'indicateur de terminaison du message // (retour à la ligne et retour de chariot): Serial.println(); } } }
Pour recevoir les messages dans Processing, on utilise la logithèque Serial.
Afficher/cacher le code
import processing.serial.*; // Lorsque vous démarrez ce code, tout les ports // séries sont affiché dans la fenêtre de déboguage. // Changer la chaîne suivante pour qu'elle // corresponde au nom de votre port série. String portName = "/dev/tty.usbmodemfd131"; // Déclarer une instance de la classe Serial: Serial serial; int a0; int d2; void setup() { size(256, 256); smooth(); println(Serial.list()); // Affiche les noms des ports. // Créer une instance de la classe Serial avec // une vitesse de 57600 baud: serial = new Serial(this, portName, 57600); // Indiquer à l'instance serial de lancer la fonction serialEvent // lorsque l'octet 10 est reçu. L'octet 10 est envoyé par // Serial.println() pour terminer le message: serial.bufferUntil(10); textAlign(LEFT,TOP); } // Définir une fonction pour recevoir les données du port série: void serialEvent(Serial p) { // Lire le message. String chaine = p.readString(); // Séparer les éléments 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 à la bonne variable selon // l'identifiant: if ( elements.length == 2 ) { if ( elements[0].equals("a0") ) { a0 = int(elements[1]); } else if ( elements[0].equals("d2") ) { d2= int(elements[1]); } } } void draw() { background(0); text("a0: "+ a0, 20, 10); rect(0,30,a0/1024.*width,20); text("d2: "+ d2, 20, 50); if ( d2 > 0 ) rect(0,70,width,20); }
Pour recevoir un message ASCII par communication série dans Max/MSP, on utilise la classe serial:
<pre><code> ----------begin_max5_patcher---------- 1681.3oc6Z0saaaCE95jmBBeia.xDD+QRT6pk0ALTfNrK5kqEExRzNrUhzkR JKoE8cY2skcwdI7K1NjxxVNwVwNSocFnH.9GZJxy4imy246HkOc5IilnuVTN B88neCcxIe5zSNwMjcfSV98SFUjbcZdRoaZiR0EEBU0nya9sJw0UtweYBJ8x jE+iRfDJTgnrLYl.8KIW60N0olYSrS02ye4HySpRuTpl8ViHspwHh4d9QLZL 6bDih83bFIJ5bDgG.WEh.WK5MKuZYlai0Sd22ErZOzpJURgv8KWXjI4s+hpt PpxEUNu.udPccU6n9cVjR4GcKBl34aG8ymdp8ky+OhROWqtRXpjFTtnDozES Lv6.f0hcW7pm+hW73gL+HO+XeNG+fPF4XAx9Yitdt3d.VtrrRfd1GyQyrS3L jnxMEg5J8M1oqMkenV.iAXqb5Ti.goHQILqZzyJE4.9gv9vfmsBtykJQptV4 1Xxi7LfxB8hB8o3fUmAT51OCnwGKGBuT73SoiXdQAD+PH7LJzymR8ImivA98 EcR+eWF8R2+dHCAi7Gsammfcdb.uw64AwrXfOqw6w7c383Cz6Ia06w6v6WNb yLqtYtnwTGMB8lGAvnD+NXy2CWlZzEk2TLQm2C5..PP.MhP1jsOh1Ky0vj07 UEcjU5j9vkHuHB72cnzAlk9vE9AhKzAAWjV5xADZ5RMuGPDYSF2n9K5EMHPD 8.gnIIpYiNe86CJd0VAbOwJN0KNvm4GCjP8mlENHjPjCMM6QiO8T6ZtQTHAQ AIlY014fx.gAffU60JPiKEVmZLJawsUBC3RNYCy0lJT4haMRAZwefz0WY.ca I01oUjXLP0.OzqUvxmIpuVt3uJbyCVijI4VEdInqjUB6N7rII0YmY20TsRIt VpU1K8GxpLHLJIsRdkaKseOUf9PszoTQs31TaYGowZM01eyTk.lWIJMw.KM5 BSVsTo2tBlvCoJMNf6QvLtkygvfHCV.i4jQ5Hc3Q6HJ4nQ58upbZCgCyZEZr MUbbCnNUaREtiqR3DWZONKQYv4zhagOXDK9yZ384IlUAJCffQNwKjFRsU9hi 7B.vN.DHQC86SuHgdDpWbrMOBfZHwR3R7RuTKKcc.0ME6vzThIDOdbXHmZIv 3dQwTZHP+SCH8wogiOVjU5Pl9jH.j21.n.K.fwN98PqbAbeBKw7iHgk6J15m ZnecsDhJ.5Vi9vBdfXj3XbDyJWfrJ26A5HAGdrj6gOC87bIz6qAUBzaima.I ZK45VWgygdSzpMxAeshbF5UKt0p.CpQIbUibSPzvddSBT7zg6alcC08xGCvD jguhjDJvQOCs9zRnJqg5g1qdLPEXz6fGkdHmkLlms8pHn+pXu.PYCM1Jxg3A 4FgrHaWW637jcTxkt7rbIY53joSkoW1bXpzEtRW1SjxVgKYIpRaosoB0h+tB zQLF5eeHJfgwta4AqoY9X.uihBirhwo8UBC6ezv.ag5Q6EKBNLviux+6i.le 72XeS5MJAE.8b4iZzvteMePXwN5VqtRLo2N0FF1VxinW1gt+rO3355GhBWAQ cDCBBx6AfXeUhjbcv9nPmJ8rY4h8CD5TUlz+sIr2XAPxNfKP8t2JTPKYhtDG aGFFtatg83eRcUkV0ZhWJaXYG0CFPCWc2B2aL.2SGXneTmm09ySzlLg4Nfv8 QMCTNHS3V+vtU.1MVZ80Tct1z3D9dTVrsrv8+.tiKrJAo6g3VtIKSl0Yscpa 88h3bBMv9IVDfV7MW4IIouelyM1YHN0qqwquRX1vAb1b6KcWZ4LkFNtxkouu 6Z2.sarDN6r8ktKw1uiGm+EOVqyirnaGTOPvF8HOXi7sfsuxAacEK0evV7wd vF9aAaaOXycItlOty+6AtPG63aFAVB8tl1tpK0QiVuwPWOURUhsk0NyIbi4b oLKSn5d3VHylqASaoIDR7Xs544bPaebL2xGF4QVJKY8vq2YYoMlwcbr8lO1W OJbO7H6iunWWZ3LG1..vCm0P2Cqg8EyZrO.xGzbrOCWDd+C+H.CY6iBEXmrp .CAsegXuf1me7pgeBB+H6SF0cb7mTLNZC3aG1yAlhGDrJWlFw7hIAgj3MRwW O7SAFa8Ix.6Sb5FFOix8w22mZF9ovm1KdK9Wr3F7SQkApGt8Vsy783XNlEtA Dud3GDhaJ8kLeNTYtboY47FPl06ZJx5dtcfQnZ9pqT7Hi3JY67cBHFkX.UVU fDqZSivnq4giN0tOe9z+EDCSbYC -----------end_max5_patcher----------- </code></pre>
Pour recevoir un message ASCII par communication série dans Pure Data, on utilise plusieurs classes qui sont distribuées avec Pd-Extended: