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 ...
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" ....
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é
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.
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