Go Down

Topic: processing : boucle (Read 853 times) previous topic - next topic

geka

bonjour,

je découvre l'Arduino, Processing, et je redécouvre l'électronique !
beaucoup de nouveauté pour mon age, et il y a un point que je ne comprend pas avec Processing.
J'aimerai récupérer des données depuis mon Arduino pour les afficher avec Processing sous forme de courbes.
mais je bloque sur un point de programmation avec Processing.
plutot que de longues explications voici un programme de test Processing qui marche :


programme 1 :
Code: [Select]

int tri = 0;
float x0 = 0;
float x1 = 0;
float y0 = 0;
float y1 = 0;

void setup(){
  size(800,800);
  background(0);
}

void draw(){
    println(tri);
    stroke(0,0,0);
    fill(0,0,0);
    rect(0+tri,0,10,300);
    stroke(10,100,100);
    line(0+tri,150,1+tri,150);
    tri++;
    if (tri > 600){
      tri = 0;
    }
}


et voici deux programmes qui ne marchent pas, et je ne comprends pas pourquoi :

programme 2 :
Code: [Select]

int tri = 0;
float x0 = 0;
float x1 = 0;
float y0 = 0;
float y1 = 0;

void setup(){
  size(800,800);
  background(0);
}

void draw(){
  while (tri<600){
    println(tri);
    stroke(0,0,0);
    fill(0,0,0);
    rect(0+tri,0,10,300);
    stroke(10,100,100);
    line(0+tri,150,1+tri,150);
    tri++;
  }
  tri = 0;
}


programme 3:
Code: [Select]

int tri = 0;
float x0 = 0;
float x1 = 0;
float y0 = 0;
float y1 = 0;

void setup(){
  size(800,800);
  background(0);
}

void draw(){
  for (tri=0;tri<600;tri++){
    println(tri);
    stroke(0,0,0);
    fill(0,0,0);
    rect(0+tri,0,10,300);
    stroke(10,100,100);
    line(0+tri,150,1+tri,150);
    tri++;
  }
}


pouvez-vous m'expliquer pourquoi les boucles while et for ne marchent pas dans draw() ?

Merci d'avance

geka

Jean-François

Dans ta boucle for enlève le deuxième "tri++" .
MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

geka

oups, erreur de test de ma part,

même sans le deuxieme tri++, ça ne marche pas

geka

claudegu

Je pense que c'est parce que "draw" est déjà une boucle qui s'exécute tout le temps.
Stone age was not finished due to a lack of stones

geka

je me suis deja posé cette question, mais java permet les boucles dans les boucles

geka

MiGaNuTs

Processing ne remets a jour l'affichage que qd tu sort de la fonction draw() (enfin je crois).

Dans tes 2 derniers prog il dessine tes trucs quelquepart dans la mémoire de l'ordi, il le remets jamais a jour a l'ecran juste avant de l'effacer a nouveau.

Il faut soit que tu mette un redraw() quelque part dans ta boucle pour forcer l'affichage de ce que tu viens de dessiner, suivi d'une petite pause qui laisse le temps de voir ce que tu as fait. (40 ms me semble un bon temps pour avoir 25 images/secondes. Plus tu diminue et plus tu verra l'image clignoter, et a 0 tu ne verra plus rien)

Tu peut aussi jouer avec fps() dans la fonction setup, en mettant un valeur <20 tu aura plus de temps pour voir l'image affichée avant qu'elle soit effacée mais e rendu risque d'etre tout moche.

Go Up