veux tu de l'aide pour ton code .??
-----
veux tu de l'aide pour ton code .??
tiens voici le code ardui
le code processing est en page 1 du post
#include <Wire.h>
byte data[6];
int val;
int yaw, pitch, roll;
int yaw0, pitch0, roll0;
void wmpOn()
{
Wire.beginTransmission(0x53);
Wire.write(0xfe);
Wire.write(0x04);
Wire.endTransmission();
}
void wmpSendZero()
{
Wire.beginTransmission(0x52);
Wire.write(0x00);
Wire.endTransmission();
}
void calibrateZeroes()
{
for (int i=0;i<10;i++)
{
wmpSendZero();
Wire.requestFrom(0x52,6);
for (int i=0;i<6;i++)
{
data[i]=Wire.read();
}
yaw0+=(((data[3]>>2)<<8)+data[0])/10;
roll0+=(((data[4]>>2)<<8)+data[1])/10;
pitch0+=(((data[5]>>2)<<8)+data[2])/10;
}
}
void receiveData()
{
wmpSendZero();
Wire.requestFrom(0x52,6);
for (int i=0;i<6;i++)
{
data[i]=Wire.read();
}
yaw=(((data[3]>>2)<<8)+data[0]-yaw0)-2;
roll=(((data[4]>>2)<<8)+data[1]-roll0);
pitch=(((data[5]>>2)<<8)+data[2]-pitch0)-8;
}
void setup()
{
Serial.begin(9600);
Serial.println("WM+ tester");
Wire.begin();
wmpOn();
calibrateZeroes();
delay(1000);
}
void loop()
{
receiveData();
Serial.print("yaw:");
Serial.print(yaw);
Serial.print(" pitch:");
Serial.print(pitch);
Serial.print(" roll:");
Serial.print(roll);
delay(100);
}
Bon laisse tomber les changements de pseudo, tu es ridicule... Pour info, je reçois une notification par mail dès que tu postes, et qui contient le message d'origine, sans les modifs...
Je jette un oeil au code Processing. Tu es sûr de ton port COM ?
sur arduino , j'ai COM 3Je jette un oeil au code Processing. Tu es sûr de ton port COM ?
mais quand je lance mon code sur processing l'erreur est : error opening Serial Port 3
Exécute ce code dans Processing et fait un screenshot, surtout la partie en bas de l'écran :
Code:import processing.serial.*; // The serial port: Serial myPort; // List all the available serial ports: println(Serial.list());
pas besoin d' impression d'écran
il y a juste écrit COM3
Tente ça :
Code:// import processing.serial.*; Serial myPort; // The serial port int xPos = 1; // horizontal position of the graph int j = 0; int counter = 0; float roll; float pitch; float yaw; void setup () { // set the window size: size(1000, 500); // List all the available serial ports println(Serial.list()); // I know that the first port in the serial list on my mac // is always my Arduino, so I open Serial.list()[0]. // Open whatever port is the one you're using. myPort = new Serial(this, Serial.list()[0], 9600); // don't generate a serialEvent() unless you get a newline character: myPort.bufferUntil('\n'); // set inital background: background(0); } void draw () { stroke(255, 255, 0); line(xPos, (height/2), xPos, (height/2)-0 - roll/12); stroke(0, 255, 255); line(xPos, (height/2)-150, xPos, (height/2)-150 - pitch/12); stroke(255, 0, 255); line(xPos, (height/2)+150, xPos, (height/2)+150 - yaw/12); if (xPos >= width) { xPos = 0; background(0); } else { // increment the horizontal position: xPos++; } } void serialEvent (Serial myPort) { // get the ASCII string: String inString1 = myPort.readStringUntil('\n'); if (inString1 != null) { // trim off any whitespace: inString1 = trim(inString1); // convert to an int and map to the screen height: float inByte = float(inString1); inByte = map(inByte, 0, 1023, 0, height/2); switch(counter) { case 0: roll = inByte; counter++; break; case 1: pitch = inByte; counter++; break; case 2: yaw = inByte; counter = 0; break; } } // at the edge of the screen, go back to the beginning: }
J'obtiens toujours la même chose ( 3 droites constantes de couleurs différentes )
Merci quand même.
T'es sûr que la arduino envoie des données qui varient ?
Donne le lien de la page sur laquelle tu as trouvé les 2 codes svp. J'ai un mauvais pressentiment...
Je vérifie à chaque fois que dans le moniteur série que j'ai des variables qui varient lorsque je bouge la manette.T'es sûr que la arduino envoie des données qui varient ?
Envoyer est un très grand mot , j'ai l'impression que la arduino n’envoie rien du tout
De plus , lorsque je débranche le port USB, les 3 courbes évoluent de la meme manière (3 courbes constantes qui s'affichent au cours du temps alors que j'ai débranché le port USB)
Faut il que je ferme l'interface arduino?avant de lancer processing
Mon problème se situe dans la réception des informations de la carte arduino par processing donc je crois que je m'y prends mal.
Désolé , je n'ai pas les pages car sa fait longtemps que je les ais
Utilise ton cerveau, si les infos apparaissent dans le moniteur, c'est que la carte envoie bien des choses...
Normal, tu perturbes la liaison série lors de la déconnection. Le code processing lit alors un peu n'importe quoi.
O U I
Eh oui !
Tu veux mon avis ? Je suis quasi sûr que les 2 codes proviennent de deux endroits complètements différents !
Non, les 2 codes coïncident .
et j'obtiens finalement quelque choses . Des courbes qui varient au cours du temps .
Ce n'est pas vraiment des courbes mais j'obtiens bien une représentation graphique des variables au cours du temps .
Merci pour ton aide.
voila , j essayerais d'améliorer l'affichage pour que ce soit exploitable .
Merci encore pour ton aide
En modifiant le code Processing, tu peux effectivement changer les gains afin de mieux cadrer les courbes dans ta fenêtre...
Voit-tu comment les cadrer ??
Déjà, isole du programme les 3 lignes qui correspondent à un tracé.
Bonjours ,
j'ai trouvé pourquoi je n'obtenais rien . Il manquait le \n dans chaque Seriel.print(" ") dans le code arduino.
size( , )isole du programme les 3 lignes qui correspondent à un tracé.
stroke(......)
line(......)
C'est uniquement la fonction line qui nous intéresse.
Étudie ses paramètres, et tu devrais comprendre lesquels modifier pour modifier le rendu du tracé de tes courbes.
Oui , j'ai déjà consulté cette page mais je n'ai pas plus compris car
on y fait réference d'un line(x1,x2,x3,x4) avec x1,x2, x3,x4 des points mais moi , j'ai des variables ce qui complique
line(1, (height/2), 1, (height/2)-0 - roll/12) ; avec roll= une variable
déja , je ne comprends pas à quoi sert le hight et pourquoi on a placée le roll à la place de x4
Merci d'avoir quand même pensé à moi
Houlà, si 4 coordonnées dans le plan te font peur on est mal...
height, c'est une variable qui retourne la hauteur de ta fenêtre. (Lire le manuel et faire une recherche est difficile, je sais). Donc si tu divises la hauteur par 2, tu centres la courbe concernée verticalement.
pourquoi on a placée le roll , pitch et yaw à la place de x4??
Tu as fait des maths...?
Oui mais la 4d c'est compliqué de se la représenter . Surtout que ce que j'obtiens avec processing n'a pas l'ai d’être 4d.
rien qu'en utilisant un point par exemple
http://la-dimension4.com/Repr%E9sent...imensions.html
je ne vois pas le rapport avec la courbe sur processing
La 4D ? C'est une blague ?
Je ne sais rien sur ton contexte, ni sur le processing, ni rien du tout.
par contre, je peux deviner 2-3 choses.
La fonction line est une fonction qui dessine une ligne.
Pour dessiner une ligne, tu as besoin de 2 point (le debut et la fin de ta ligne, typiquement).
En gros, ta fonction line c'est plutot
line (x1, y1, x2, y2)
Donc on reste purement dans de la 2D.
1, (height/2)
Cela te permet de faire en sorte que le 1er point de ta ligne soit en x=1 et au milieu de ta fenêtre grace à y=height/2
1, (height/2)-0 - roll/12
x=1 te permet de mettre le deuxieme point fixé sur 1 en x, donc ta ligne ne sera que vertical (ou horizontal, a voir).
(height/2)-0 - roll/12
heigth/2 te permet de partir du centre, le -0, je vois pas a quoi il sert, et pour finir, roll est une variable.
Et encore heureux que tu as la variable, parce que sinon qu'est-ce que tu verrais ?
J'imagine que roll/12, c'est parce que la variable roll dépasse le cadre de la fenêtre.
Ca te parle ?
Que quelqu'un me corrige si je dis une connerie, ce ne sont que des supposition.
Par contre, a moins d'un fonctionnement "caché"/inhérent à ce que tu utilise, tu n'obtiendras pas des courbe, mais plutôt un diagramme en barre.
Pour avoir une courbe (la encore, ce n'est que supposition), il te faudra garder en mémoire tout les relevé du roll, et à chaque mise à jour, tu redessine toute la fenêtre en décalant.
Je peux faire un pseudo-code si tu ne vois pas (mais je te conseil d'abord de réussir à avoir des données).
Merci pour la réponse mais
la fonction line permet bien de tracer la courbe?
car si on place le 1 er point (1, (height/2)) et le 2 ème point (1,x) avec x= variable
Cela me gène que le 2 éme point a une coordonnées sur l'axe des abscisses 1 car elle devrais augmenté au cours tu temps ??
et que veux dire width ?? car
if (xPos >= width) {
xPos = 0;
background(0);
} else {
// increment the horizontal position:
xPos++;
}
Et le xPos++ permet il juste de continuer le tracé??
Non, "line" est un mot anglais qui se traduit par "ligne" en français.
Donc, à moins que le créateur de la fonction soit vicieux, retors, psychopathe à tendances schizophrénique, il est fort probable que la fonction "line" se charge de tracer une ligne.
Et comment on fait pour obtenir une courbe ? On fait plein de ligne.
Non, et je vais me répéter :
Par contre, a moins d'un fonctionnement "caché"/inhérent à ce que tu utilise, tu n'obtiendras pas des courbe, mais plutôt un diagramme en barre.
Pour avoir une courbe (la encore, ce n'est que supposition), il te faudra garder en mémoire tout les relevé du roll, et à chaque mise à jour, tu redessine toute la fenêtre en décalant.
Je ne comprends pas ce bout de code car je ne connais pas le contexte.
mais je te suggère d'utiliser un traducteur en ligne "anglais <-> français".
width = largeur
Je suis donc prêts à parier que c'est la largeur de la fenêtre (un peu comme height).