pour le 1er point j'ai compris mais pour le 2 ème point (1, x) je ne le comprends pas .
Cela est due au faite que je n'ai pas encore compris quel est la droite qui est tracé .
qu'elle est la lignes qui est tracé : est ce la largeur des barres du digramme à barre que j'obtiens
Je crois que j'ai compris les droites qui sont tracés sont verticales d'ou pourquoi (1, , 1 , )EDIT : Grillé, et +1 pour les "batons"
Oui , j'obtiens bien un diagramme à barre .
Comment puis-je obtenir des courbes ?
.garder en mémoire tout les relevé du roll, et à chaque mise à jour, tu redessine toute la fenêtre en décalant
je vois pas vraiment comment réaliser cela sur java (processing)
Sérieusement, où tu vois ça ?
Tu enregistres les coordonnées du point précédent, et tu traces une ligne de coordonnées (point précédent)-(nouveau point)Comment puis-je obtenir des courbes ?
PS : Pas la peine de tout mettre en gras, on arrive à lire. Je te l'ai déjà expliqué avant que tu ne changes de nom...
Oui, ca ressemblera à un diagramme en barre, vu que la seule variation que tu va avoir, c'est en hauteur.
pardon yoruk, je n'avais pas vu le lien que tu avais mis (il est très clair).
????
Je ne comprends pas tes premières phrase alors.
Tu te demande ce que tu es censé obtenir, si c'est bien un diagramme en barre, et puis tu dis que tu obtient un diagramme en barre.
Cela implique donc que tu réussi bien à récupérer des données, c'est un bon pas.
Je ne vois pas non plus car je ne connait pas le langage, mais si tu veux VRAIMENT une courbe, voici une piste :
Tu fais un tableau de "widht" case.
A chaque fois que tu reçoit une valeur, tu fais :
Décaler toutes les valeur du tableau à droite (tab[3] est copier dans tab[2], tab[4] est copier dans tab[3]).
tableau[0] = nouvelle valeur
Ensuite, il ne te reste plus qu'a utiliser le tableau pour afficher :
Le numéro de la case, c'est "X", pour avoir le premier point de la ligne, c'est "tableau[indice]" et pour obtenir le deuxieme point, c'est "tableau[indice + 1]".
J'ai (x1,y1,x2,y2) avec (x1,y1) et (x2,y2) 2 points permettant des tracés si je me trompe pas, les hauteurs des battons .
line(1, (height/2), 1, (height/2)-0 - roll[i]/12) - line(1, (height/2), 1, (height/2)-0 - roll[i+1]/12) ??
Oui, tracer une ligne.
Dans un certain sens, oui. La fonction trace une ligne, ligne qu'on peut interprété comme un bâton.
line est une fonction qui retourne un type "void".
Si c'est comme en C, on ne peut appliquer aucune opération sur un type "void" ("void" AN -> "rien" FR).
ecrire "line(...) - line(...)" revient a écrire, après exécution des fonctions, "void - void".
Qu'est-ce que tu cherche à faire ? Une courbe ?
Explique-nous avec des mots comment tu compte faire (l'algorithme) ?
Le miens, je te l'ai déjà donné.
oui , une courbe et non un diagramme bâtonQu'est-ce que tu cherches à faire ? Une courbe ?
Je dois enregistrer à chaque fois mon point au cours du temps et tracer une ligne par la soustraction en fesant une soustraction entre mon mon nouveau point et mon point précédent .
Mais après le langage C , je rencontre des difficultés à me l'approprier
Je ne sais pas exactement ce que tu entends par "soustraire" (en réalité, tu as juste besoins d'utiliser deux point, pas besoins de soustraire ou faire une autre opération) mais ca ressemble à l'idée. tu enregistre tout les point et tu les utilises par pair pour faire des lignes.
Le C, c'est le langage que je connais et avec lequel je fais mes supposition.
J'ai regardé un peu "processing", et il semblerait que ce soit un langage à part (bien qu'il ressemble beaucoup au C).
Je ne peux donc pas faire un code directement fonctionnel, et c'est pour cela que je t'invite à nous décrire ton algorithme (car un algorithme est indépendant d'un langage).
Ok ,j"essayerais
Sait tu as quoi sert le switch, le case et le break ??
Lesn informations que je trouve sur les sites sont flous
A la condition que le switch-case de "processing" se comporte de la même façon que le C, je te recommande de lire ceci.
L'explication se trouve vers la fin de la page.
Pour faire une courbe, je te l'ai déjà dit (mais c'est vrai que tu as des diffcultés à lire) qu'il te suffit simplement de conserver dans 2 variables les coordonnées du dernier point tracé et de tracer le suivant à partir de ce point. Après, si tu veux des courbes qui défilent sur l'écran, c'est un peu plus compliqué et il te faut effectivement un tableau.
Après, il faut aussi choisir le pas en X qui correspond à une chose logique... Car là, avec un pixel de décalage à chaque fois suivant X, que tu traces une courbe ou des bâtons, le rendu visuel sera le même...
Et allez, je suis sympa, je te donne le lien avec toute l'aide de Processing, dans laquelle il y a plein d'infos sur toutes les variables et fonctions : https://processing.org/reference/ .Le minimum à savoir !
Oui, c'est vrai, mais je suppose que seul des test pourront vraiment dire quel pas de X est le "meilleur".
Si on part du principe que l'acquisition du roll se fait plusieurs fois par secondes, un pas de 1 sur X pourrait être cohérent (roll ne varie pas de 100 à -30 par exemple, mais de 100 à 102, 106, etc etc).
Après, si l’acquisition ne se fait pas assez rapidement, on risque effectivement d'avoir juste un gros paté de ligne blanche lors de roll un peu trop rapide.
A tester donc.
Bonjours ,
Voila j'obtiens un truc comme cela
stroke(255,255,0);
roll[0] = map(roll, 0 , 1 , height/4, height/8);
for(int i = 1; i < roll.length; i++) {
line(i, roll[i], i-1, roll[i-1]);
Mets toi à notre place, qu'est-ce que tu veux qu'on te dise ?
On n'a pas d'image du résultat, on se demande si on a le code complet vu que la parenthèse du for n'est pas fermé, qu'on a pas la définition des variables, ...
La en gros, on a juste une boucle qui parcours un tableau et qui fait des lignes selon les valeurs présentes dans le tableau, mais ces données, c'est n'importe quoi ...
Je vais essayer de coder et je reviendrais vers vous .
Oui , c'est vrai que j'ai oublié les variables .....etc .....
Si quelqu'un pourrait m'aider se serait vraiment sympa
Je suis vraiment à cours d'idée .
Voila j'ai une partie que je doit rajouter à mon code ( il manque la classe String qui est dans mon code initial)
mais je ne suis pas sur qu'elle marche ( et je doute vraiment que mon code coincidera avec mon code arduino)
int rollValues[] = new int[3];
int pitchValues[] = new int[3]
float roll[] = new float[2];
float pitch[] = new float[2];
void setup() {
// set the stage
size(1000, 500);
background(0);
println(Serial.list());
myPort = new Serial(this, Serial.list()[0], 9600);
myPort.clear(); // clear the serial buffer:
void draw(){
stroke(255,0,0,180);
line(-1, constrain(roll[1]/2, 0, 180) , 0 , constrain(roll[0]/2, 0, 180) )
stroke(0,255,0,180);
line(-1, constrain(pitch[1]/2, 0, 180) , 0 , constrain(pitch[0]/2, 0, 180) )
roll[1] = roll[0];
pitch[1] = pitch[0];
for (int i = 0; i < 3; i++){
roll[0] += rollValues[i];
pitch[0] += pitchValues[i];
roll[0] /= 3;
pitch[0] /= 3;
Tu sais Khalil, dire ce genre de chose, ça revient à dire "les autres ne sont pas compétent et ne font que de la m*rd*".
D'une part, c'est assez insultant pour ceux qui t'ont aidé (je n'aurait pas la prétention de parler à la place Yoruk, mais c'est mon ressentit), mais d'autre part cela n'engageras pas le reste à venir t'aider pour la simple raison que tu te permet de tacler les gens qui t'aide.
Mais tu sais quoi ?
Je suis moi aussi un gros noob dans un domaine (électronique) et j'ai eu la chance d'être aidé malgré le fait de mon manque flagrant de base.
Alors je vais te laisser encore une chance.
Voici donc mes conseils :
"Les scies n'aiment pas les raies".
Retient cette phrase, comme ca, la prochaine fois que tu comment une phrase par "Si", tu ne mettras pas le verbe avec "rrait" (Si quelqu'un pourrait m'aider se serait vraiment sympa).
Ensuite, fait un code MINIMAL.
Par exemple, concentre-toi uniquement sur le roll (laisse tomber le pitch).
Commence par faire une fonction qui prends en argument un tableau et qui décale chaque valeur "à droite" (la case d'indice I prends la valeur de la case d'indice I - 1).
Poste cette fonction.
Non pas du tout . Merci pour votre aide à vous et à Yoruk . Je me suis fait mal comprendre ."les autres ne sont pas compétent et ne font que de la m*rd
Je voulais dire que je voulais passer directement au but pour que vous m'indiqué ou cela cloche dans ce code
Je me permettrait pas de dire que vous êtes incompétents car vous en savait probablement beaucoup plus que moi
et certaines de vos explications m'ont vraiment permit de comprendre en peu de temps .
Dans le domaine de l'éléctronique , je n'en connait pas mieux mais j'essaye de me demerder
for(int i = 1; i < roll.length, i++) {
line(i, roll[i], i-1, roll[i-1]);
franchement là , je ne vois plus comment faire . C'est là ou je voulais en venir
}
Penses-tu que la fonction que tu as posté corresponds à ce que je te demande ?Commence par faire une fonction qui prends en argument un tableau et qui décale chaque valeur "à droite" (la case d'indice I prends la valeur de la case d'indice I - 1).
Poste cette fonction.
Si vous me posez la question , c'est que non mais je ne vois vraiment pas comment faire ce que vous me dites .
Okay, poste le code de la boucle qui permet de parcourir un tableau de la première case a la dernière
et ensuite poste le code de la boucle qui permet de parcourir un tableau de la dernière à la première case.
utilise les balise code ou quote pour bien séparer le code de ce que tu écrit.
{parcourir un tableau de la première case a la dernière
int tableau[5], i = 0;
tableau[0] = 10;
tableau[1] = 23;
tableau[2] = 505;
tableau[3] = 8;
tableau[4] = 66;
for (i = 0 ; i < 5 ; i++)
{
print(tableau[i]);
}
parcourir un tableau de la dernière à la première case
{
int tableau[5], i = 5;
tableau[0] = 10;
tableau[1] = 23;
tableau[2] = 505;
tableau[3] = 8;
tableau[4] = 66;
for (i = 5 ; i > 0; i--)
{
print(tableau[i]);
}
Attention, le deuxieme code est erroné.
Si tu as 5 case, tu vas de 0 à 4.
Donc
Devientfor (i = 5 ; i > 0; i--)
{
print(tableau[i]);
}
Ensuite, il me semblait avoir vu une syntaxe de type "tableau.length".for (i = 4 ; i >= 0; i--)
{
print(tableau[i]);
}
Est-ce que ce code fonctionne sous processing ?
Si oui, on sait maintenant partir de la fin d'un tableau.int i;
for (i = tableau.length - 1; i >= 0; --i) {
}
Le but maintenant, c'est de faire une/des opérations au sein de la boucle afin de décaler toutes les valeurs d'une case vers l'indice supérieur.
On va donc partir de l'avant dernière case pour y mettre la valeur de la dernière case, et la boucle se chargera de faire la même opération dans tout le tableau.
int i;
for (i = tableau.length - 2; i >= 0; --i) {
/* A TOI DE JOUER */
}
int i;
for (i = tableau.length - 2; i >= 0; --i) {
roll[i] =roll[i-1]; avec tableau=roll
}
ce sert à quoi de(j'ai bien compris que c'est çà qui faut faire mais pourquoi?partir de l'avant dernière case pour y mettre la valeur de la dernière case
Merci de mettre les code dans des balise code ou quote, ça m'est utile.
Imagine que tu as ce tableau.
0 1 2 3 4
Le "but", c'est de décaler les valeur à droite afin de permettre l'insertion à gauche d'un nouveau nombre (au hasard, 5).
Il faut donc dans un premier temps faire
0 0 1 2 3
(il y a un double zéro au début car la première case n'est pas modifié) et ensuite on insert
5 0 1 2 3
Il y a plusieurs manière de faire :
soit on part de l'avant dernière case et on mets dans I + 1 la valeur de I
soit on part de la dernière case et on mets la valeur de I - 1 dans I.
Tu as fait un mixte des deux, ce n'est donc pas bon.
Excuse-moi pour ne pas avoir été plus clair avant.
Propose-moi donc un code (entre balise code ou quote).
stroke( , , );
for (int i = roll.length-1; i > 0; i--) {
roll[i] = roll[i-1];
}
for(int i = 1; i < roll.length; i++) {
line(i, roll[i], i-1, roll[i-1]);
}
je comprends à peux près ce que tu veux que je fasse mais je ne comprend pas à quoi sa sert
Pourquoi parcourir le tableau dans un sens puis dans un autre
au début , je dois avoir un truc comme ça
float[] roll;
roll = new float[width];
float[] roll; indique quoi ?? toute les valeurs du tableau roll pouvant être décimales
pour le new float[width] je ne coprends pas . cela indique un tableau de taille nouvelle??
Non , malheureusement cela ne marche pas
Non, on ne parcours pas le tableau dans les deux sens pour décaler, quand ai-je dit cela ?
Tu me dis ne même pas savoir comment faire pour décaler les valeur d'un tableau à l'indice supérieur.
Donc, je regarde ton code, je vois que tu sais faire une boucle pour parcourir un tableau, je te demande donc de refaire cela (histoire de voir si tu comprends un minimum) et ensuite, je te demande de faire cette boucle dans le sens inverse (si tu as compris, tu devrais savoir le faire).
L'algo final, je te l'ai expliqué (décaler tableau -> insérer nouvelle valeur en début de tableau -> effacer écran -> redessiner toute les lignes qui compose la courbe).
Tes deux boucles, de ce que je peux imager, sont bonnes.
Hormis le fait que tu n'effaces pas l’écran (je ne sais pas si tu dois le faire, comment le faire), tu devrais avoir un résultat.
Si c'est un type de base (je ne sais pas si les structure existe en processing), peu importe le type (int / float) du tableau, on décale les valeurs.
Je ne peux pas répondre !
Je ne connais pas ce langage, c'est à toi de regarder la doc, de la lire, de la comprendre et de la digérer !
poste le code complet, mais tu devrait avoir des résultat, même aberrant.
Quand auront-nous ENFIN une image qui illustre le résultat du code actuel.
MET TOI A NOTRE PLACE, comment veux-tu que l'on t'aide ?
Voici le code que j'ai . Il y a des erreurs car aucune fenêtre ne souvre
l'erreur que j'ai expected EOF, found 'if'
import processing.serial.*;
Serial myPort; // The serial port
int xPos = 1; // horizontal position of the graph
int j = 0;
int counter = 0;
float[] roll;
roll = new float[width]
void setup () {
// set the window size:
size(1000, 500);
println(Serial.list());
myPort = new Serial(this, Serial.list()[0], 9600);
myPort.bufferUntil('\n');
background(0);
}
void draw () {
stroke(255,255,0);
for (int i = roll.length-1; i > 0; i--) {
roll[i] = roll[i-1];
}
line(i, roll[i], i-1, roll[i-1]);
}
if (xPos >= width) {
xPos = 0;
background(0);
} else {
xPos++;
}
}
void serialEvent (Serial myPort) {
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;
}
}
}