fonction void serialEvent(serial myPort) dans Processing

Bonjour

Pour tracer une courbe sinusoïdale sous Processing, avec les valeurs calculées par Arduino, il est facile de trouver des exemples sur internet. Par exemple celui de la page: http://www.iut-troyes.univ-reims.fr/wikigeii/index.php/Cours:ArduinoProcessing

[u]Code Arduino:[/u]

void setup(){
  Serial.begin(115200);
}

void loop() {
  static float angle=0.0;
  float sinus;
  int i;
  sinus = (unsigned char) 127.0+127.0*sin(angle);
  Serial.println(sinus);
  angle += 0.1;
  delay(50);
}

[u]Code Processing:[/u]

import processing.serial.*;

Serial myPort;
int xPos = 1;
int lastxPos=1;
int lastheight=0;

void setup () {
  size(600, 400);

  println(Serial.list());
  myPort = new Serial(this, Serial.list()[0], 115200);
  myPort.bufferUntil('\n');
  background(0);
}
void draw () {}

void serialEvent (Serial myPort) {
  String inString = myPort.readStringUntil('\n');
  if (inString != null) {
    inString = trim(inString);
    float inByte = float(inString);
    inByte = map(inByte, 0, 1023, 0, height);
    stroke(127,34,255);
    strokeWeight(4);
    line(lastxPos, lastheight, xPos, height - inByte);
    lastxPos= xPos;
    lastheight= int(height-inByte);


    if (xPos >= width) {
      xPos = 0;
      lastxPos= 0;
      background(0);
    }
    else {
           xPos++;
    }
  }
}

A la compilation, la fenêtre s'ouvre, de la bonne taille et de la bonne couleur, mais la sinusoïde ne se dessine pas. J'ai bien choisi le bon numéro de port. Par exemple, si après la ligne

line(lastxPos, lastheight, xPos, height - inByte);

je rajoute

println(xPos);

je vois bien dans la console série de Processing les valeurs de xPos s'afficher. Cela confirme que mon problème ne vient pas de la liaison série. J'ai alors décidé de supprimer l'appel de la fonction void serialEvent (Serial myPort) et d'intégrer son contenu directement dans la fonction void draw(). Et là ça fonctionne correctement. Je ne comprends pas pourquoi la courbe ne se dessine pas si elle codée dans la fonction serailEvent(), puisque celle ci est bien appelée à chaque fois qu'une donnée est disponible sur le port série, mon test dans la console série de Processing, ayant permis de le vérifier.

Merci d'avance pour votre aide.

Bonjour, Pas dans la bonne rubrique : Ici c'est le royaume des cours et tutos. Voir ICI et LA

Pour cet exemple http://www.arduino.cc/en/Tutorial/Graph

qui permet de visualiser graphiquement la tension présente sur la borne analogique A0, j'arrive à le faire fonctionner. Et je remarque que la fonction line() est cette fois dans draw() et non dans serial.Event(). J'ai l'impression que les codes d'affichage comme line() ne fonctionnent pas à l'intérieur de serialEvent(). Pourtant on trouve sur internet plein de codes avec des commandes de dessin dans la fonction serialEvent() et ils sont présentés comme fonctionnels par leur auteur.