Utiliser Processing avec Arduino, communication série.
Bonjour
Suite du projet: Détecter l'allumage d'un led que je viens de passer en résolu.
Pour cette partie, je vais utiliser la démarche suivante:
- Collecte d'informations sur la communication série Arduino et Processing.
- Etude des exemples fournis avec l'Ide Arduino.
Je vous ferai part des résultats de ces études, afin que vous corrigiez si possible mes erreurs.
J'en profite pour traduire les commentaires intégrés à ces exemples, qui sont en Anglais; si ça peut servir à quelqu'un!
Je commencerai par l'exemple "Graph" de la partie communication.
Visualiser dans Processing, sous forme graphique les valeurs lues sur l'entrée analogique A0.
Euh! c'est pas gagné d'avance.
A suivre!
Utiliser Arduino avec Processing etc..
Bonsoir
Voici le résultat de mes premières élucubrations avec Processing.
Le circuit c'est Jay M.; lecture sur le port A0.
Les programmes que j'ai étudiés et adaptés L'exemple Graph dans l'Ide Arduino + quelques autres.
La documentation, essentiellement les références du langage de Processing + quelques boites de tranquillisants.
La vidéo du résultat dans la fenêtre Processing, si j'arrive à l'insérer.
J'arrive pô.
c'est une .mov; que j'ai créé en utilisant save.frame() et l'outil movie maker de Processing. On fait comment?
Ben oui on peut pas tout savoir!:mouarf:
Utiliser Processing avec Arduino
Bonjour
Oui la vidéo est lue correctement sur mon ordinateur.
D'ailleurs, je la trouve vraiment très belle! :lol:
Je regarde les formats acceptés.
Utiliser Arduino avec Processing etc..
Bonjour
Pour l'insérer, il faut la poster sur youtoube.
[https://youtu.be/uPxhallv-fM.
J'ai passer la vidéo en "non répertoriée".
C'est beau hein! Je ne m'en lasse pas je sens l'oscar arriver. :ptdr::ptdr:
Utiliser Arduino avec Processing etc..
Encore moi
Le programme
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| // Programme tiré de l'exemple grahp de l'Ide Arduino
import processing.serial.*; // Importe la bibliothèque communication série + classes associées, le ".*".
Serial myPort; // Contient N° port utilisé ici 1.
String valeurInString;
void setup () {
size(400, 300); // Taille de la fenêtre d'affichage en pixels / Format size(width, height).
printArray(Serial.list()); // Imprime dans la console la liste des ports séries disponibles. En option, sil ny en a quun seul.
myPort = new Serial(this, Serial.list()[0], 115200); // Le port série utilisé et la vitesse de transmission; attention la liste commence à 0 ; idem qu'Arduino.
myPort.bufferUntil ('\n'); // Ne rien faire sur le port série, tant qu'une donnée nouvelle ligne n'est pas dans le tampon (pas sûr de tout ça).
textFont(createFont("Grenoble SF", 24)); // Création dune police de caractères.
background(0); // Définir le noir pour la fenêtre de visualisation.
}
void draw() { // Appelle fonction dessin. On constate que laxe des x représente le temps, laxe des y la valeur de la donnée.
background(0); // Rafraîchissement de lécran pour éviter de décrire les valeurs lune sur lautre.
text("Valeur lue = " + valeurInString, 50, 100); // Affichage aux coordonnées définies x = 100, y = 50 tout ça en pixels.
saveFrame(); // Sauvegarde dune série dimage ; elles se trouvent au même endroit que le sketch.
}
void serialEvent (Serial myPort) { // Appel de la method pour lire le port série.
String inString = myPort.readStringUntil ('\n'); // Acquisition de la donnée en code ASCII.
if (inString != null) { // Vérifie si une donnée est présente sur myPort.
inString = trim (inString); // Elimine les blancs ?
valeurInString = inString; // Sauve la valeur lue sur le port série, dans la variable valeurInString.
}
} |
Les commentaires indiquent le rôle des lignes, où tout au moins ce que j'ai compris.
J'ai trouvé une erreur dans l'exemple "Graph".
La suite: Gestion du temps et les tableaux.
Utiliser Processing avec Arduino
Bonjour
Oups
Je me suis certainement trompé d'option; je vérifie
Utiliser Arduino avec Processing etc..
Bonsoir
J'ai modifié les paramètre de la vidéo; elle doit être accessible.
Merci Jay M. pour le partage, mais ça me passe largement au dessus.
En plus maintenant: avec ma p'tite vidéo j'avais l'air d'un c... ma mère avec ma p'tite vidéo j'avais l'air.....
Bon allez! on continue.
Utiliser Arduino avec Processing etc..
Bonjour
Jay M
Je vous avais dis que c'était un chef d'œuvre!
Le plus important pour moi = le programme fonctionne; mais je sais pourquoi.
Je viens de le modifier avec lecture en digital ça fonctionne bien aussi.
Dans votre partage précédent, je n'ai pas vu le code; ; cela me serait peut être utile pour la phase 2; pour la façon de dessiner à l'écran surtout; si c'est de mon niveau de compréhension bien sur.
Pourriez vous m'indiquer une bonne lecture pour comprendre les tableaux.:arf:
Merci
Utiliser Processing avec Arduino
Merci Jay M.
Je jetterai un œil; histoire d'apprendre.
Pour comprendre et utiliser ces "*+-z" de tableaux; une doc à me conseiller? sinon je verrais les "references langage".
Pour l'instant je me casse les dents sur une boucle if else pour afficher un message différent selon que la led est allumée 1 ou éteinte 0.
je cherche je cherche je cherche etc.
Utiliser Processing avec Arduino
Bonjour
Merci Jay M de ces éclaircissements.:plusser:
Si j'ai bien compris, en rajoutant ce que j'ai pu lire par ailleurs, si je veux un tableau (array ) à deux dimensions x lignes y colonnes j'ai la ligne de code suivante:
le premier terme étant le type de données que je veux stocker.
Puis je dimensionne le nombre d'éléments.
Donc la grosse différence entre array et une liste, c'est que l'allocation de l'espace mémoire pour la liste est dynamique.
Donc comme je connais le nombre maximum de données que je dois stocker, je peux prendre un tableau; mais... comme je ne suis pas sûr d'avoir à toujours stocker ce maximum de données, pour faire plus pro, j'ai intérêt à prendre une liste.
Il faut bien entendu que l'on puisse faire des listes à deux dimensions.
Je vais chercher la réponse.
Pour l'instant je cherche pourquoi mes conditions if else sont ignorées.
A suivre
Utiliser Arduino avec Processing etc..
Bonsoir
Pour ceux qui ont des insomnies, je vous livre une énigme sous forme de mon programme.
Après une grosse prise de tête avec if else, qui n'était qu'en fait qu'un problème de compatibilité de variables, problème enfin résolu.
Voici le programme;: le blême est que je n'arrive pas à éviter que les affichages se superposent; je m'en suis tiré par une pirouette (cacahuète); je n'en suis pas satisfait pour autant.
Chercher l'erreur!
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| // Programme tiré de l'exemple grahp de l'Ide Arduino
import processing.serial.*; // Import la bibliothèque communication série + classes associées.
Serial myPort; // Contient N° port utilisé ici 1.
int valeurInString; // Variable globale, car je ne savais pas où la placer en variable locale.
String afficheEtat ;
void setup () {
size(400, 300); // Taille de la fenêtre d'affichage en pixels / Format size(width, height).
printArray(Serial.list());
myPort = new Serial(this, Serial.list()[0], 115200);
myPort.bufferUntil ('\n'); // Ne rien faire sur le port série, tant qu'une donnée nouvelle ligne n'est pas dans le tampon( pas sûr tout ça).
textFont(createFont("Grenoble SF", 24));
background(0); // Définir le noir pour la fenêtre de visualisation.
}
void draw() { // Appelle fonction dessin. On constate que laxe des x représente le temps, laxe des y la valeur de la donnée.
background(0); // Rafraîchissement de la fenêtre pour éviter d'écrire les valeurs l'un sur l'autre.
if (valeurInString == 1) { // Test si la donnée lue sur le port série et stockée dans valeurInString est égale à 1.
afficheEtat = "ON" ; // True Remplace la valeur stockée dans valeurInString.
text("Etat led = " + afficheEtat, 50, 100); // Affiche la valeur de valeurInString.
}
afficheEtat = " OFF" ;
text("Etat led = " + afficheEtat, 50, 100);
}
void serialEvent (Serial myPort) {
String inString = myPort.readStringUntil ('\n'); // Acquisition de la donnée en code ASCII.
if (inString != null) { // Vérifie si une donnée est présente sur myPort.
inString = trim (inString); // Elimine les blancs ?
print (inString) ; // Affiche bien 0 et 1 dans la console.
valeurInString = (int (inString)) ;
}
} |