Interface graphique processing

Fermé
theotro Messages postés 1 Date d'inscription mardi 7 avril 2015 Statut Membre Dernière intervention 9 avril 2015 - 9 avril 2015 à 11:00
 Utilisateur anonyme - 9 avril 2015 à 11:06
Actuellement en terminale STI2D (SIN) et en plein dans mon projet. Mon rôle est est de créer une interface graphique sur processing à l'aide de données récupérées sur le port série d'Arduino.
Je dispose de 3 capteurs (1:Luminosité,2:Humidité,3:Pression,Température et Altitude).
Je réalisé un thermomètre pour la température donc avec le baromètre (3:Pression,Température et Altitude) et je rencontre un problème : je n'arrive pas dissocier les différentes variables et donc le thermomètre n'interagit avec les données reçue car il prend également en compte la Pression et l'Altitude.
Je voudrais donc savoir comment dissocier les données qui arrive sur le port série.

Voici ci dessous mon programme processing :

//Import de la librairie communication serie
import processing.serial.*;

//Initialisation des variables
Serial monPort; //Déclatation port série pour la lecture des données envoyées par l'Arduino
int mesure; //Mesure lue sur le port

//Initialisation des variables
float pres;
float alt;
float temp; //Temperature mesurée par l'Arduino
int j; //Indice de travail
int k; //Indice de travail
int x=0; //Abcisse
int x0=0; //Abcisse précédente
float y=0; //Ordonnée
float y0; //Ordonnée précédente
PImage thermometre;
PFont police;

//Traitements d'initialisation
void setup() {

//Initialisations port série
println(Serial.list()); // Affichage dans la console de la liste des ports serie du PC
monPort = new Serial(this, "COM8", 9600); //Initialisation de la communicaiton port serie
monPort.bufferUntil('\n'); //Attend la réception d'un fin de ligne pour généer un serialEvent()

//Initialisatiopns graphiques
size (1000,610);
background(#9FB84D);
smooth(); //On active le lissage

//Dessin des cadres -------------------------
stroke(0);
strokeWeight(1);
fill(230);
rect (20,20,210,500); //Thermometre
rect (20,525,210,65); //Textes


//Dessin des titres -------------------------
fill(255,0,0);

text("Température instantanée", 35, 40);
thermometre = loadImage("thermometre.jpg");
image(thermometre,290,525,65,65);
fill(0,0,255);



//Dessin du thermomètre -----------------------
fill(50);
noStroke();
rect(100,70,20,420);
ellipse(110, 490, 40, 40);

//Dessin du réservoir
ellipse(110, 70, 20, 20);
fill(#0BB305);
ellipse(110, 490, 30, 30);

//Gradations et textes tous les 5 degrés
fill(50);
strokeWeight(2);
stroke(50);

//à gauche
for (int i = 0; i < 11; i++) {
j=i*40;
k=i*5;
line(90, 475-j, 100,475-j);
text(k+" °C", 50, 475-j);
}

//à droite
for (int i = 0; i < 11; i++) {
j=i*40;
k=i*5;
line(120, 475-j, 130,475-j);
text(k+" °C", 140, 475-j);
}

//Gradations fines des degrés

//à gauche
strokeWeight(1);
stroke(50);
for (int i = 0; i < 50; i++) {
j=i*8;
line(95, 475-j, 100,475-j);
}

//à droite
strokeWeight(1);
stroke(50);
for (int i = 0; i < 50; i++) {
j=i*8;
line(120, 475-j, 125,475-j);
}

}

//Traitements itératifs
void draw() {
// Pas de traitement car tout est réalisé dans la fonction serialEvent()
}

//Traitements à réception d'une fin de ligne
void serialEvent (Serial monPort) {

//Récupération sur le port série de la tension sous forme de chaine de caractères
String tempI = monPort.readStringUntil('\n');
if (tempI != null) {
tempI = trim(tempI); // Suppression des blancs
temp = float(tempI);

println ("La temperature est de : " + temp + " degrés " );

//Dessin graphe avec temperature actuelle -----------------------
stroke (0,255,0);
strokeWeight(1);

//dessin du nouveau point sur la courbe
x0=x; // Mémorisation abscisse point précédent
x=x+5; // L'Arduino envoie une nouvelle mesure de température toutes les 5 secondes
if (x >600) {x=5;}

y0=y; // Mémorisation ordonnée point précédent
y = temp*8; // Un degré correpond à 8 points sur les ordonnées

//Dessin thermometre avec temperature actuelle -----------------------
temp=y/8;
noStroke();
fill(#0BB305);
rect(105,475-temp*8,10,temp*8+5);
fill(#08F500);
rect(110,480-temp*8,3,temp*8-5);

//Affichage des températures ----------------

//Dessin des cadres -------------------------
stroke(0);
strokeWeight(1);
fill(230);
rect (20,525,210,65);

//Dessin du thermomètre -----------------------
fill(50);
noStroke();
rect(100,70,20,420);
ellipse(110, 490, 40, 40);

// Dessin du réservoir
ellipse(110, 70, 20, 20);
fill(#0BB305);
ellipse(110, 490, 30, 30);

//Dessin temperature actuelle -----------------------
noStroke();
fill(#0BB305);
rect(105,475-temp*8,10,temp*8+5);
fill(#08F500);
rect(110,480-temp*8,3,temp*8-5);

noStroke();
fill(230);
rect(160,500,70,20); //effacement texte précédent heure
rect(25,500,60,20); //effacement texte précédent date
fill(0,0,255);
text(hour()+" : "+minute()+" : "+second(), 160, 514);
text(day()+" / "+month()+" / "+year(), 25, 514);

//Textes
fill(0,0,255);
text("Température actuelle :", 40, 540);
textAlign(RIGHT);
fill(#0BB305);
text(temp+" °C", 220, 540);
fill(0,0,255);
fill(255,0,0);
textAlign(LEFT);

}
}

1 réponse

Utilisateur anonyme
9 avril 2015 à 11:06
Bonjour .

Afin d'avoir une réponse rapide et objective des différents intervenants du forum CCM ,

il serait souhaitable de reformuler votre question avec des formules simples de courtoisie

telles que " Bonjour " , s'il vous plait " , " merci " .


Merci d'avance et bonne journée .


-6