Bonjour, je suis actuellement en projet et j'aurais besoin d'un coup de pouce.
J'ai le programme arduino suivant qui permet de lire les valeurs d'un potentiomètre que j'ai converti en déplacement (ex : pour 1V sa correspond a tant de millimètre) ainsi que les valeurs d'un accéléromètre sur l'axe Y seulement(c'est celui qui m'intéresse).
Mon but est de représenter les valeurs de ces deux capteurs sur un graphique avec Processing. Sur le moniteur de série j'ai de bonne valeur que je voudrais mettre sous forme graphique donc j'ai essayé de faire un programme sous processing mais ça ne fonctione pas, et je ne suis pas trop à l'aise avec processing. Tous les programmes seront en fin de texte. Auriez vous d'autre logiciel lié avec Arduino me premettant de représenter ces valeurs sous forme graphique ? (Ma connexion entre Arduino et Bluetooth se fait par le port de série COM6).
Programme Arduino :
#include <Wire.h>
#include "MMA8452.h"
const int poten = 0; // le potentiomètre, branché sur la broche analogique 0
int valeurLue; //variable pour stocker la valeur lue après conversion
float P; //on convertit cette valeur en une tension
float A=0;
void setup()
{
Serial.begin(9600);
Serial.println("Exemplo de uso do acelerometro MMA8452");
Wire.begin(); // Initialise I ² C communication
initMMA8452(); // Tests et initialise le MMA8452
}
void loop()
{
int acelCont[3]; // Variable qui stocke les valeurs des lectures de 12 bits
readAccelData(acelCont); // Lecture de tous les axes du capteur (Seulement Y nous interesse)
float acelG[3]; // Variable pour stocker les valeurs de l'accélération en g (9,8 m / s ²)
// Calculer l'accélération et sépare la acelG de matrice
for (int i = 0 ; i < 3 ; i++)
{
acelG[i] = (float) acelCont[i] / ((1<<12)/(2*GSCALE));
A=acelG[1];
}
{
//on convertit en nombre binaire la tension lue en sortie du potentiomètre
valeurLue = analogRead(poten);
//on traduit la valeur brute en tension (produit en croix)
P = (valeurLue * 5.0 / 1024)*12;
//on affiche la tension calculée
Serial.print("deplacement = ");
Serial.print(P,2);
//On l'envoie à Processing
Serial.print("mm");
Serial.println();
Serial.println(); //on saute une ligne entre deux affichages
delay(100); //délais d'attente pour l'affichage
}
// Imprimi os valores na Serial
for (int i = 1 ; i < 2 ; i++)
{
//On l'envoie à Processing
Serial.print("accelerometre");
Serial.print("=");
Serial.print(A,4);
Serial.println();
}
Serial.println();
Serial.println();
Serial.print("--------------------------------------------------");
Serial.println();
// Saut à la ligne
delay(100); // Delais pour la visibilité des valeurs.
}
Ce que j'obtient comme valeur dans le port de série :
Programme processing :
import processing.serial.*;
static final int WIDTH = 1000;
static final int HEIGHT = 800;
Serial myPort;
int[] Acc = new int[WIDTH];
int[] Pot = new int[WIDTH];
float P;
float A;
void setup() {
size(WIDTH, HEIGHT);
noSmooth();
P= 0;
A=0;
println(Serial.list()[1]); //list of available serial ports
String portName = Serial.list()[1]; //replace 0 with whatever port you want to use.
myPort = new Serial(this, portName, 57600);
myPort.bufferUntil('\n');
}
void draw() {
// shift all data by one position
for (int i=0; i<WIDTH-1; i++) {
Acc[i] = Acc[i+1];
Pot[i] = Pot[i+1];
Acc[WIDTH-1] = int(A);
Pot[WIDTH-1] = int(P);
}
// clear screen
background(0);
// draw graphs
for (int i=0; i<WIDTH-1; i++) {
stroke(0, 255, 0);
line(i, Acc[i], i+1, Acc[i+1]);
line(i, Pot[i], i+1, Pot[1+i]);
}
}
void serialEvent(Serial myPort) {
String line = myPort.readStringUntil('\n');
if (line!=null) {
// split incoming line into tokens
String[] q = splitTokens(line);
if (q.length == 3) {
A = HEIGHT/2 - HEIGHT/2 * float(q[1]);
P = HEIGHT/2 - HEIGHT/2 * float(q[1]);
}
}
}