Récupérer une valeur analogique Arduino avec Processing

Un petit tuto pour récupérer 3 valeurs analogiques numériques d’un Arduino vers le logiciel Processing qui va nous traduire graphiquement ces données.

Tout d’abord Processing est téléchargeable ici.

Dans cet exemple on va se servir des données recueillies par 3 photorésistances pour gérer l’affichage d’un fond coloré RGB sur notre écran de PC.

Ci-après le montage assez simple, nos capteurs reliés aux ports analogiques A1, A2, A3.

Capteurs_RGB_Processing

Le programme Arduino :
• On déclare les ports utilisés et les variable de notre R, G, B.
• On initialise le port série à 28800 bauds mais ça marcherait aussi en 9600, l’important étant de retrouver cette valeur dans le programme Processing.
• On affiche nos 3 valeurs en utilisant des séparateurs (ici une virgule) et un retour à la ligne (avec « Serial.println ») ce qui va nous permettre sous Processing de distinguer clairement quoi est quoi (ou qui est qui si vous voulez…).
• On termine par un delay pour ménager la bête. C’est une valeur avec laquelle on va pouvoir jouer pour « fluidifier » ou non notre affichage.

const int Voie_R=1;
const int Voie_G=2;
const int Voie_B=3;

int mesure_bruteR=0;
int mesure_bruteG=0;
int mesure_bruteB=0;

void setup()   {
Serial.begin(28800);
} 

void loop(){
mesure_bruteR=analogRead(Voie_R);
mesure_bruteG=analogRead(Voie_G);
mesure_bruteB=analogRead(Voie_B);

Serial.print(mesure_bruteR);
Serial.print(",");
Serial.print(mesure_bruteG);
Serial.print(",");
Serial.println(mesure_bruteB);

delay(50);
}

Le programme Processing :
Utilise le même IDE qu’Arduino du coup on s’y retrouve.
• dans le « void draw() » on ne met rien, la boucle de lecture se passe dans la fonction « SerialEvent () ».

import processing.serial.*;
Serial myPort;   

float var1;
float var2;
float var3;

void setup() {
  size(displayWidth, displayHeight); //Affiche en plein écran
  myPort = new Serial(this, Serial.list()[2], 28800);
  //Important : se câler sur la valeur en baud du prog Arduino
  myPort.bufferUntil('\n');
}

void draw() {
  }

void serialEvent (Serial myPort) {

background(0); //efface l'écran à chaque boucle

 String inString = myPort.readStringUntil('\n');
 if (inString != null){

 inString = trim(inString);
 int inputs[] = int(split(inString,',')); // on élude les virgules

// on affecte nos 3 valeurs
  if(inputs.length == 3){
   var1 = inputs[0];
   var2 = inputs[1];
   var3 = inputs[2];

 // On ré-échelonne la valeur analogique en valeur RGB
 var1 = map(var1, 0, 1023, 0, 255);
 var2 = map(var2, 0, 1023, 0, 255);
 var3 = map(var3, 0, 1023, 0, 255);

 }

  background (var1, var2, var3);  

}
}

Et voilà notre écran varie en fonction des valeurs récupérées (il faut jouer à cacher ou pas les 3 photorésistances et la couleur de background varie).

Merci au site mon-club-elec.fr qui m’a donné pas mal de clés pour ces débuts avec Processing.

Laisser un commentaire