Une carte arduino et Processing peuvent communiquer par le port série.
En reprenant le montage de la photorésistance, nous allons faire communiquer l’Arduino pour qu'un dessin dans Processing soit modifié en fonction de la luminosité reçue.
Lorsque la carte Arduino est branchée, il faut repérer le port actif. Dans l'exemple ci-dessous, c'est le port “COM6”.
Dans Processing, le code suivant permet d'afficher la liste des ports disponibles :
import processing.serial.*; void setup() { printArray(Serial.list()); } void draw() { }
Dans notre exemple, le port “COM6” prend pour valeur 1.
Nous reprenons le code du cours sur la photorésistance. Pour rappel, la photorésistance est connectée à la broche analogique A0.
void setup() { Serial.begin(9600); // Initialise la communication avec l'ordinateur } void loop() { int valeur = analogRead(A0); // Mesure la tension sur la broche A0 Serial.println(valeur); // envoie la mesure par le port série delay(250); }
Pour recevoir des données par le port série avec Processing, il faut utiliser la librairie processing.serial.
Il faut spécifier :
Le code Processing suivant récupère une valeur comprise entre 0 et 1023 envoyée par la carte Arduino. Elle est ensuite traitée pour afficher des cercles dont la couleur varie en fonction de la lumière.
import processing.serial.*; Serial myPort; int valeurPortSerie; void setup() { size(400, 400); // List all the available serial ports println(Serial.list()); myPort = new Serial(this, Serial.list()[1], 9600); // à modifier en indiquant votre numéro de port série myPort.bufferUntil('\n'); // ne pas appeller serialEvent () sauf si un caractère de nouvelle ligne est présent dans le buffer } void draw() { // traitement de la donnée : afficher des disques colorés en fonction de la lumière background(255,255,255); /* la valeur de valeurPortSerie initialement comprise entre 0 et 1023 et "mappée" en une valeur comprise entre 0 et 255 */ float rouge = map(valeurPortSerie, 0, 1023, 0, 255); fill(rouge, 0, 0); ellipse(200, 200, 150, 150); } void serialEvent(Serial myPort) { String stringLecture = myPort.readStringUntil('\n'); // lire une chaine jusqu'au retour chariot if (stringLecture != null) { float intLecture = float(stringLecture); // Convertit une chaîne de caractères en un nombre en virgule flottante. valeurPortSerie= int(intLecture); // ne conserver que la partie entière } }