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/...uinoProcessing
Code Arduino:
Code Processing:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 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); }
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
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40 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++; } } }
je rajoute
Code : Sélectionner tout - Visualiser dans une fenêtre à part line(lastxPos, lastheight, xPos, height - inByte);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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part println(xPos);
J'ai alors décidé de supprimer 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 serialEvent(), 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
Partager