Dernière mise à jour le 7 décembre 2022 par LMD
Il y a deux exemples fournis avec Arduino pour établir une communication entre Arduino et Processing qui correspondent aux deux sens de communication possible : Processing vers Arduino (exemple Physical Pixel) et Arduino vers Processing, plus courant (exemple Graph).
La communication se fait dans les deux cas par le Port Série, soit la prise USB de votre ordi relié à la carte Arduino.
1. Processing vers Arduino
Dans ce cas, il s’agit d’envoyer des informations depuis Processing vers un système Arduino. En s’inspirant de l’exemple fourni dans Menu Fichier > Exemples > 04.Communication > Physical Pixel, nous allons mettre en place un double code qui permet d’allumer une led selon la position de la souris sur un écran.
1_a. Le code Processing
// Initialiser le Port série
import processing.serial.*;
// Déclarer un objet Serial pour le port utilisé
Serial port;
color fond = color(0);
void setup() {
size(800, 600);
noStroke();
// List all the available serial ports in the output pane.
// You will need to choose the port that the Arduino board is connected to from this list.
// The first port in the list is port #0 and the third port
// in the list is port #2.
printArray(Serial.list());
// Open the port the Arduino board is connected to (here #0)
// Make sure to open the port at the same speed Arduino is using (9600bps)
port = new Serial(this, Serial.list()[1], 9600);
}
void draw() {
background(fond);
// Dessiner un rectangle rouge sur la moitié droite de la fenêtre
fill(255, 0, 0);
rect(width/2, 0, width/2, height);
// Tester si la souris est dans la moitié droite ou gauche
if (mouseX > width/2) {
// envoyer 'H' si la souris est sur le rectangle rouge à droite
// Cela allumera la led
port.write('H');
println('H');
}
else {
// envoyer 'L' si la souris est sur le rectangle blanc à gauche
// cela éteindra la led
port.write('L');
println('L');
}
}
Le code commence par établir la communication Série. Puis dans le draw(), un rectangle rouge est dessiné sur la moitié droite de l’écran sur un fond noir. Enfin, on teste la position de la souris et on envoie une information à Arduino. Lorsqu’elle survole la zone rouge, la lettre ‘H’ est transmise, sinon c’est la lettre ‘L’ qui est envoyée.
Les informations transmises par le port Série sont a priori des caractères.
1_b. Le montage
Placez directement une led rouge sur la carte Arduino, sur les pins 13 et Ground.
La pin 13 est associée à une résistance intégrée à la carte et ne nécessite donc pas l’usage d’une résistance en plus. Dans le cas d’un montage sur Breadboard, une résistance de 220 Ohms est obligatoire.
1_c. Le code Arduino
// relier une led roude sur la pin 13
const int ledPin = 13;
// la variable pour recevoir l'information envoyée par Processing
int incomingByte;
void setup() {
// initialiser la communication Serial
Serial.begin(9600);
// déclarer la pin de la led en sortie
pinMode(ledPin, OUTPUT);
// éteindre la led
digitalWrite(ledPin, LOW);
}
void loop() {
// tester s'il y a une information entrante
if (Serial.available() > 0) {
// read the oldest byte in the serial buffer
incomingByte = Serial.read();
// if it's a capital H (ASCII 72), turn on the LED
if (incomingByte == 'H') {
digitalWrite(ledPin, HIGH);
}
// if it's an L (ASCII 76) turn off the LED
if (incomingByte == 'L') {
digitalWrite(ledPin, LOW);
}
}
}
Tapez et téléversez ce code sur la carte Arduino branchée à la prise USB de votre ordinateur.
ATTENTION : il peut y avoir un conflit sur l’utilisation du Port Série au moment de lancer le sketch Processing. Il faut alors quitter Arduino, lancer le sketch Processing et éventuellement relancer Arduino.
La commande qui permet de récupérer le contenu du Port Série est Serial.read(); Cette valeur est un nombre entier, a priori le code ASCII du caractère envoyé (on pourrait le vérifier avec un Serial.print() mais ce n’est pas possible car à ce moment là, le port série est occupé par Processing).
Il ne reste plus qu’à adapter ce code aux situations que vous allez imaginer.
2. Arduino vers Processing
Ici, à l’inverse, il s’agira de récupérer les données de capteurs connectés à la carte Arduino et de les envoyer vers Processing pour les traiter en image et/ou avec du son.

