processing : boucle

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 :

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 :

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:

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

Dans ta boucle for enlève le deuxième "tri++" .

oups, erreur de test de ma part,

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

geka

Je pense que c'est parce que "draw" est déjà une boucle qui s'exécute tout le temps.

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

geka

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.