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 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134
|
/* lecture_defauts_test_9_004.pde
* Fonctionne avec sketch_test_9_F_000.ino.
* Fermer le port série et afficher le message "Fin Test" au bout de 330 changements d'état de Ldc.
* Le message "Fin Test" reste affiché jusqu'à l'appui d'une touche; le programme est ensuite fermé.
* Toutes les variables de la version finale sont déclarées.
* Les variables non utilisées dans cette version sont annulées comme des commentaires.
* Affichage des titres en statique, dans la fonction setup puisqu'ils n'ont besoin d'être affichée qu'une seule fois.
* Utilisation du tableau façon M.Jay pour l'affichage des titres.
* Affichages des messages; Attente Test; Test en Cours; Fin de test.
* Le message "Attente Test" s'affiche tant qu'il n'y a pas de donnée à lire sur le port série.
* Le message "Test en cours" s'affiche tant qu'il y a des données à lire sur le port série.
* Le message "Fin Test" reste affiché jusqu'à l'appui d'une touche puis exit du programme.
* Utilisation du drapeau FLAG1 qui prends les valeurs suivantes: 0 Attente Test; 1 Test en Cours; 2 Fin de test.
* Affichage des messages par fonction afficheMessage (). * Utilisation de if + compteur à la place de switch case.
* Affichage des messages dans un rectangle dessiné par le fonction afficheRectMessage ().
* --------------Fonctionnement du programme ---------------------------------
* Appel de la fonction afficheMessage () FLAG1 == 0 (1ère boucle de draw).
* Affiche le message "Attente Test".
* Test si une donnée est présente sur le port série D7 LOW.
* TRUE Mets le drapeau message à 1. Appel de la fonction rempliSauveDataLdc ().
* Appel suivant de afficheMessage () FLAG1 == 1; le message "Test en Cours" est affiché.
* rempliSauveDataLdc () lit; sauve; et affiche les données. Vérifie la valeur de valeur pas si >=330 FLAG1 = 2 pour fin de test.
* Appel suivant de afficheMessage () FLAG1 == 2; le message "Fin Test" est affiché le port série est fermé et on attend ESC pour sortir du programme.
*/
// Déclaration
// Utilisation de la police de caractères par défaut.
import processing.serial.* ; // Import la bibliothèque communication série + classes associées.
Serial myPort ; // Contient N° port utilisé ici 0 pour COM1.
int FLAG1 = 0; // Drapeau pour affichage des messages de test.
Table dataLdc; // Déclaration d'une variable de type table (table vide et non existante).
String titreColonnes[] = { // Tableau d'une seule ligne, qui contient sous forme string, les titres à afficher .
"Pas", "Etat Ldc", "Temps Réel", "Temps Précédent", "Durée Etat Précédent", } ;
// Variables pour l'acquisition des data.
int ldcState;// Dans cet indice représente toutes les valeurs lues sur le port série.
int cpteTemps = 0 ; // Temps écoulé depuis le début du programme.
int preCpteTemps = 0 ; // Temps au dernier changement d'état de led Ldc
int dureeLdcState = 0 ; // Durée calculé d'un état donné non utilisé dans cet indice.
int valeurPas = 0 ; // Numéro de ligne pour compteur acquisition données, utilisé pour la création de la table.
// Variables pour le calcul des codes. Non utilisé dans cet indice.
// int CODE = 0 ;// Valeur code défaut.
void setup () {
size (600, 600); // Taille de la fenêtre d'affichage.
background (255) ; // Couleur de fond de la fenêtre blanc.
textSize (20) ;
fill (0) ; // Couleur du texte noire.
//frameRate (5);
dataLdc=new Table (); // Allocation de la mémoire pour la table.
// Création de la table et ajout des colonnes de titre.
for (int i = 0; i <titreColonnes.length; i++) dataLdc.addColumn (titreColonnes[i]);
afficheTitresDataLdcState ();
afficheRectMessage ();
//printArray (Serial.list()) ; // Affiche la liste des port série disponibles.
myPort = new Serial (this, Serial.list () [0], 115200) ; // Port série utilisé et vitesse de transmission.
myPort.bufferUntil ('\n');
}
void draw () {
afficheMessage ();
println (" Flag ", FLAG1);
//if (myPort.available () >0) { // Début condition 1; Vérifie si il y a une donnée à lire.
// TRUE.
// FLAG1 = 1;
}
void serialEvent (Serial myPort) {
println ("Où suis-je");
String lireLdcState = myPort.readStringUntil ('\n'); // Acquisition de la donnée en code ASCII.
//print (lireLdcState) ; // Affiche bien 0 et 1 dans la console.
if (lireLdcState != null) { // Vérifie si une donnée est présente sur myPort.
lireLdcState = trim (lireLdcState); // Elimine les blancs ?
//print (lireLdcState) ; // Affiche bien 0 et 1 dans la console.
ldcState = (int (lireLdcState)) ;
println (ldcState) ;
rempliSauveDataLdc (ldcState);
}
}
void afficheTitresDataLdcState () { // Appel de la fonction pour l'affichage des titres.
fill (0);
smooth ();
for (int i =0; i<titreColonnes.length; i++) text(titreColonnes[i], 20, 50*(i+1)) ; // 25*(i+1) pour séparer de 25 points chaque ligne (la police fait 20 de haut)
strokeWeight (3);
stroke (#FA0808);
line( 20, 300, 550, 300);
}
void afficheRectMessage () {
fill (#FAB6EA);
noStroke ();
rect (178, 435, 244, 30);
}
void afficheMessage () {
if (FLAG1 == 0) {
fill (0);
smooth ();
text ("Attente Test", 250, 457 );
println ("T'es là con!");
} else if (FLAG1 == 1) {
afficheRectMessage ();
fill (0);
text ("Test en Cours", 250, 457 );
} else if (FLAG1 == 2) {
afficheRectMessage ();
fill (0);
text ("Fin Test", 250, 457 );
myPort.stop ();
// Le message Fin de test reste affiché jusqu'à l'appui de la touche 1 du clavier numérique.
if (keyPressed) {
if (key == ESC)
exit () ;
}
}
}
void rempliSauveDataLdc (int valeur) {
// ldcState = myPort.read ();
// print (ldcState);
cpteTemps = millis () ;
TableRow newRow = dataLdc.addRow () ;
newRow.setInt (titreColonnes [0], valeurPas) ;
newRow.setInt (titreColonnes [1], valeur) ;
newRow.setInt (titreColonnes [2], cpteTemps) ;
newRow.setInt (titreColonnes [3], preCpteTemps) ;
newRow.setInt (titreColonnes [3], (cpteTemps - preCpteTemps)) ;
saveTable ( dataLdc, "data/newdataLdc.csv") ;
preCpteTemps = cpteTemps ;
valeurPas ++ ;
FLAG1 = 1;
if (valeurPas ==20) {
FLAG1 = 2; // Indique que les acquisitions de données sont en cours.
}
} |
Partager