Interaction entre Arduino et Processing


Objectif

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.

Identification du port actif

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.

Envoyer une donnée par l'Arduino

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);
}



Réception d'une donnée avec Processing

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
   }
}

Statistiques du site