Processing

Bonjour la compagnie :smiley:

voila j'essaye depuis quelque temps d'afficher en temps réel des données de l'arduino via processing (l'idée est de faire une petite interface avec les données qui s'affichent en temps réel sur la même fenêtre)

j'ai essayé en communiquant via le port série (demande-réponse). Ca marche avec une seule données à la fois ... pas moyen d'en lire plusieurs !

sauriez vous où je pourrais trouver un exemple qui puisse m'aider ? car la, je sèche ...

merci d'avance :slight_smile:

Bonjour,
Je cherche aussi. J'ai trouvé un sketch qui envoyeait 16 bits de données, les 8 premiers pour x et les 8 suivants pour Y.
Ma solution serait d'envoyer les données successivement (x,y,z, puis les nouvelles valeurs de x,y,z...) mais je n'ai jamais eu le courage de me lancer dans un sketch de ce type. (il faut sans doute ajouter un octet d'initialisation, pour être bien sur que l'on commence à "x" par exemple).
En tout cas si quelqu'un a une solution plus simple, je suis preneur!

Tout dépends de ce que tu appelles "temps réel", car cette notion est relative et sera influencée par la marge que tu vas donner à cette "réalité".

Si c'est à perception humaine, alors pas de problème tu auras facilement du temps réel avec Arduino et Processing.

Par contre si c'est pour donner la position d'un mobile à un moment précis... ça devient déjà plus difficile :

à 50 km/h tu fais 13,89 m/s >>> 13,89 mm/milliseconde >>> 13,89 microns/microsecondes

la mesure ne pourra au mieux n'être prise que toutes les 4 microsecondes par l'Arduino, donc une réalité décalée de 55,56 microns.... et ensuite ta liaison série ne sera pas aussi rapide que le nombre de mesures traitées, disons que ta liaison série est 10 fois moins rapide que la prise de mesure, tu auras de nouveau un décalage et tu ne connaitra ta position que tout les 5,556 centièmes de mm.

De plus l'Arduino ne lit les capteurs qui sont branché dessus que l'un après l'autre, donc ce ne sera pas possible d'avoir toutes les mesures en mêmes temps.

Pour parler de mesure en "temps réelle", il faut déjà savoir ce que l'on veux mesurer, pourquoi faire et avec quelle "précision" ....

Alors dit nous en plus sur ton projet

Jean-François:
Tout dépends de ce que tu appelles "temps réel", car cette notion est relative et sera influencée par la marge que tu vas donner à cette "réalité".

Si c'est à perception humaine, alors pas de problème tu auras facilement du temps réel avec Arduino et Processing.

Par contre si c'est pour donner la position d'un mobile à un moment précis... ça devient déjà plus difficile :

à 50 km/h tu fais 13,89 m/s >>> 13,89 mm/milliseconde >>> 13,89 microns/microsecondes

la mesure ne pourra au mieux n'être prise que toutes les 4 microsecondes par l'Arduino, donc une réalité décalée de 55,56 microns.... et ensuite ta liaison série ne sera pas aussi rapide que le nombre de mesures traitées, disons que ta liaison série est 10 fois moins rapide que la prise de mesure, tu auras de nouveau un décalage et tu ne connaitra ta position que tout les 5,556 centièmes de mm.

De plus l'Arduino ne lit les capteur qui sont branché dessus que l'un après l'autre, donc ce ne sera pas possible d'avoir toutes les mesures en mêmes temps.

Pour parler de mesure en "temps réelle", il faut déjà savoir ce que l'on veux mesurer, pourquoi faire et avec quelle "précision" ....

Alors dit nous en plus sur ton projet

oui c'est vrai que j'ai pas été précis désolé :blush:

en fait j'ai pas forcément besoin de précision, une fréquence d'acquisition d'une seconde suffirait largement. Donc si la page avec toutes mes données se rafraîchit toutes les secondes c'est bon ...

c'est essentiellement des mesures de tensions, d'état de capteurs (HIGH ou LOW), de mesures de températures ... je dois avoir une dizaine de capteurs en tout. C'est pour un banc d'essai de mesure pour une batterie au lithium.

Il y a des choses à finir et d'autres à modifier, mais en gros c'est ça.

Coté Arduino :

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

void loop()
{

Serial.print(Volt);
Serial.print(";");
Serial.println(Ampere);
}

Et coté Processing :

import processing.serial.*;

Serial myPort; // The serial port

void setup() {
size (300,240); //taille de la fenetre
background(0); // couleur du fond >> noir

println(Serial.list()); // liste les ports usb utilise >> [2] pour moi

myPort = new Serial(this, Serial.list()[2], 115200); // initialise le port usb [2] a 15200 baud
myPort.clear(); // vide le buffer

myString = myPort.readStringUntil(lf); // lit sur le port jusqu'a "lf" et fait la chaine "myString"
myString = null;
}

void draw() {
while (myPort.available() > 0) {
myString = myPort.readStringUntil(lf);
if (myString != null) {
print(myString);
String list[] = splitTokens(myString,";"); //divise la chaine a chaque; et supprime les ;
if (list.lenght==2) { // si le tableau a bien deux valeurs
background(0); // couleur du fond >> noir
text("Volts "+list[0] +" Amperes "+ list[1],30,50);
}
}
}
}

Ensuite, tu peux rajouter un fonction de temps pour que l'affichage ne se fasse que 25 x par secondes, ça te soulage un peu la CPU... java est gourmand et bouffe tout ce que tu lui laisses XD

super merci, plus qu'à essayer :grin:

Petite correction :
la syntaxe de la fonction qui donne la longeur d'une liste est list.length

A part ca le code fonctionne nickel !

ça c'est du déterrage utile.... XD

C'est corrigé, merci.