bonjour,
pas sur d'être au bon endroit, je devrais peut-être ecrire sur processing
j'essaie de récupérer et visualiser avec processing plusieurs signaux analogique et binaire envoyés par arduino sur la liaison série
Arduino envoie des données avec le format suivant
data1,data2,bin1,bin2
soit quelque chose qui ressemble à
512,124,0,1
520,120,0,1
530,130,1,0
...
mon problème, c'est que je n'arrive pas à initialiser l'acquisition avec processing, les premières trames acquises ont un format bizarre
connection a COM4
355,88,0,j345,85,bŠHhšºb¢b‚bŠj
32,8,0,1
321,80,0,1
312,77,0,1
304,75,0,0
295,73,0,0
ce qui plante mon programme
le programme processing est le suivant
============
/*
oscilloscope minimaliste avec un arduino
récupère les valeurs via une liaison serie
*/
import processing.serial.*; // importation de la librairie de communication serie
//variables
Serial maConnection; // Crée un objet de communication série
int tension1; // variable ou sera stockée la valeur de la tension
int tension2; ////affichage
int fenetreTemps=12000; // temps pour parcourir la largeur de l'écran en millisecondes
int x=0;
int y=0;
void setup() {
size(650, 400); // taille de l'ecran
String NomDuPort = Serial.list()[1]; // récupère la première interface serie trouvée
println("connection a "+NomDuPort);
maConnection = new Serial(this, NomDuPort, 9600); // création de la connexion série
background(255); // fond d'écran blanc
smooth(); // lisser les dessins
strokeWeight(2); // largeur de trait
stroke(40); // couleur du trait gris
}
void draw() { //boucle de dessin principale
//rien ne s'y passe, tout est géré dans la fonction serialEvent
}
void serialEvent (Serial maConnection) { // si des données arrivent par la connexion série
String retour=maConnection.readStringUntil('\n'); // lit la donnée jusqu'à la fin de ligne
if (retour != null) { //si le retour n'est pas vide
retour = trim(retour); // enlever les espaces
println(retour);
int[] voie = int(split(retour, ","));
//println(voie[0]);
tension2 = int(voie[0]); // converti le texte en nombre entier
// tension2 = int(voie[1]); // converti le texte en nombre entier
}
//détermination du X actuel
int oldx=x;
x=(millis()%fenetreTemps)*width/fenetreTemps;
if (oldx>x) {
//reprise au debut de l'écran
oldx=0;
background(255); //fond d'écran blanc
}
//determination de la valeur de Y
int oldy=y;
y=int(map(tension2, 0, 1023, 200, 100)); // mise à l'échelle de la tension pour entrer dans l'écran
line(oldx, oldy, x, y); // dessine le trait
}
========
j'attends vos conseils
merci
Edit de Jean-François : merci d'utiliser les balises pour le code