// /* J'ai réussi à lire les données du Serial, maintenant je veux que Processing COMPTE chaque changement de valeur et garde ce compte en mémoire que l'affichage change, par ex faire grossir un cercle... v1 ça fonctionnait mais sans historique le cercle grossit à toute vitesse donc j'ajoute une variable pour historique d'état : je peux compter les clics et le cercle grossit 1 fois par clic (et pas en constant tant que cliqué) */ import processing.serial.*; Serial myPort; // Create object from Serial class String dt; // Data received from the serial port float valD; int btnVal = 0; // une valeur int pour d'etat bouton, 0 relache int oldBtn = 0; // une valeur pour conserver l'état précédent int cptBtn = 1; // une variable pour compter les appuis PFont matypo; // ça c'est parcequ'il aime pas les car du Serial il râle si on précise pas void setup() { size(800, 600); // printArray(Serial.list()); // pour voir le port qui parle String portName = "/dev/ttyACM3";// Changer le nom selon valeur reçue du listing ligne pcdte. myPort = new Serial(this, portName, 9600); // valeur cadence en baud comme dans Arduino // myPort.bufferUntil(lf); // charge de 10 caractères ??? // printArray(PFont.list()); // pour voir les typo dispo sur le poste matypo = createFont("Open Sans", 48); textFont(matypo); } void draw() { while (myPort.available() >0) { dt = myPort.readStringUntil('\n'); if (dt !=null) { // si on lit qqchose on le trasnforme en int avec ces 2 lignes valD = float(dt); btnVal = int(valD); } } background(255); fill(#245682); translate(width/2, height/2); if(btnVal==0 && oldBtn !=0){ // si c relache sur les 2 on ne fait rien mais si ça vient de changer oldBtn = 0; } else if (btnVal ==1 && oldBtn !=1){ cptBtn = cptBtn + 1; oldBtn = 1; } ellipse(0, 0, cptBtn*5, cptBtn*5); fill(#c2c3c4); textSize(48); text(btnVal, 0, 0); textSize(36); text("recoit: " +btnVal, 10, 50); text("nb Clic: " +cptBtn, 10, 80); }