Commit b60d121a authored by Aimene Akkouche's avatar Aimene Akkouche
Browse files

Upload New File

parent e197951d
// ------- Bibliothèques ---- //<>//
import processing.serial.*;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.util.*;
import g4p_controls.*;
// ---------- DÉBUT DE LA DÉFINITION DE LA CLASSE BOUTON -------
class Bouton {
String nom, adresse; // Chaînes de caractères qui stockent le nom et l'adresse de la prise
int posX,posY; // Entiers qui stockent la position de la prise sur l'interface
boolean rectOver= false; // rectOver = true => la souris est au-dessus de la prise; false sinon
int etat = 0; // 0 = LED éteinte, 1 = LED allumée
color couleur, highlight; // Objets propres à Processing qui stockent la couleur de base et la couleur lors du passage de la souris
// ---------- Constructeur de la classe Bouton, permet d'instancier les objets représentant les prises -------
Bouton(int x, int y,color co,color hl,String name, String adress, String etatLed){
posX= x;
posY = y;
highlight = hl;
nom = name;
adresse = adress;
etat = parseInt(etatLed);
initColor();
}
// ---------- Méthode qui est appellée pour vérifier si la souris est au-dessus de la prise -------
boolean overRect() {
return (mouseX >= posX && mouseX <= posX+size && mouseY >= posY && mouseY <= posY+size);
}
// ---------- Méthode qui est appellée pour mettre à jour la variable rectOver de la prise selon si la souris est au-dessus ou non -------
void update(){
//Si la souris est au-dessus du bouton
if(this.overRect()){
rectOver = true;
} else {
rectOver = false;
}
}
// ---------- Méthode qui est appellée pour mettre à jour le visuel de la prise dans l'interface -------
void squareOver(){
if(rectOver){
fill(highlight);
}
else{
fill(couleur);
}
square(posX,posY,size);
stroke(0);
}
// ---------- Méthode qui est appellée pour mettre à jour l'état et le visuel de la prise -------
void clickedButton(int i){
if(rectOver){
println("Bouton LED n°"+i+ " cliqué"+"\n");
if(etat == 0){
etat = 1; //Si la led est allumée elle devient éteinte et inversement
couleur = color(246,254,0);
}
else{
etat = 0;
couleur = color(255);
}
print("Etat de la LED n°"+i+" : "+ etat+ "\n");
}
}
// ---------- Méthode qui est appellée pour initialiser la couleur de la prise lors de son instanciation -------
void initColor(){
if(etat == 1){
couleur = color(246,254,0);
}
else{
couleur = color(255);
}
}
}
// ---------- FIN DE LA DÉFINITION DE LA CLASSE BOUTON -------
// ---------- Déclaration des variables globales -------
Serial myPort; // Déclaration du BUS Serie
String Data2Send; // Chaine à envoyer par le BUS Serie
int size; //Taille des boutons sur l'interface
int nbPrises; // Nombre de prises
color currentColor; // Couleur de l'arrière-plan de l'interface
int x, y; // Coordonnées permettant de stocker la position du dernier bouton
List<Bouton> b; // Définition de la liste dynamique d'objets Bouton
StringDict adresses_prises; // Définition d'un dictionnaire de chaîne de caractère contenant les informations des prises : nom, adresse et état
// ---------- Initialisation de l'interface -------
void setup(){
createGUI(); // On initialise la fenêtre graphique à partir de la librairie G4P
size(1024,720); // On définit la taille de cette fenêtre
// ---------- Initialisation des variables -------
adresses_prises = lectureAdresses(); // On lit les adresses dans le fichier texte que l'on stocke dans une variable
myPort = new Serial(this, Serial.list()[2], 9600);
Data2Send = ""; //Initialisation de la chaîne de caractère à envoyer par le port Série
size = 90; // La taille est en pixels
nbPrises = adresses_prises.size(); // Nombre de prises = nombre de prises récupéré à partir du fichier texte
currentColor = color(100);
x = 20;
y = 20;
// ---------- Initialisation de la liste dynamique et instanciations des prises -------
b = new ArrayList<Bouton>();
//Création des objets représentant les prises
for(int k = 0; k < nbPrises;k++){
Bouton btampon = new Bouton(x,y,color(0),color(220),adresses_prises.keyArray()[k],adresses_prises.valueArray()[k].substring(1),adresses_prises.valueArray()[k].substring(0,1));
b.add(btampon); // On ajoute le nouvel objet créé à notre liste dynamique d'objets
// On change la valeur de x et/ou de y afin que les prises soient bien positionnées sur l'écran
if (x >= 775) {
y +=135;
x = 20;
} else {
x = x+ 125;
}
}
}
// ---------- Fonction propre à Processing qui sera appellée continuellement afin de rafraîchir l'écran -------
void draw(){
for (Bouton button : b) button.update();
background(currentColor); fill(255);
for (Bouton button : b){
button.squareOver();
text(button.nom,button.posX+ 35,button.posY - 2);
}
}
void mousePressed(){
for (Bouton button : b) button.clickedButton(b.indexOf(button));
}
// ---------- Fonction qui s'occupe de lire le fichier texte afin d'en extraire le nombre de prise et les informations des prises -------
StringDict lectureAdresses (){
BufferedReader reader; //La classe BufferedReader lit du texte à partir d'un flux d'entrée de caractères en mettant en mémoire tampon les caractères
String line; // Chaîne de caractère stockant la ligne du texte en cours
reader = createReader("adresses.txt");
StringDict adresses = new StringDict(); // Définition d'un dictionnaire de chaîne de caractère contenant les informations des prises : nom, adresse et état
// ---------- On utilise une boucle pour lire tout le fichier -------
do{
// ---------- On emploie la structure try...catch afin de gérer les erreurs de lecture -------
try {
line = reader.readLine();
} catch (IOException e) {
e.printStackTrace();
line = null;
}
if (line == null) {
continue;
} else {
String[] data = split(line, " ");
adresses.set(data[0],data[2] + data[1]);
}
} while (line != null);
try {
reader.close();
} catch (IOException e) {
System.err.println(e);
}
return adresses;
}
// ---------- Fonction qui s'occupe de lire le fichier texte contenant la voie prédéfinie et modifie la liste dynamique de prises -------
void setVoie1(){
// ---------- Elle reprend la même structure que la fonction de lecture du fichier texte d'origine -------
BufferedReader reader;
String line;
reader = createReader("voie1.txt");
StringDict adresses = new StringDict();
do{
try {
line = reader.readLine();
} catch (IOException e) {
e.printStackTrace();
line = null;
}
if (line == null) {
continue;
} else {
String[] data = split(line, " ");
adresses.set(data[0],data[2] + data[1]);
}
} while (line != null);
try {
reader.close();
} catch (IOException e) {
System.err.println(e);
}
nbPrises = adresses.size(); // On modifie le nombre de prise initial avec celui lut dans la voie
b.clear(); // On supprime toutes les prises de l'interface car la voie prédéfinie pour les réajouter les nouvelles prises liées à la voie
x = 20;
y= 20;
for(int k = 0; k < nbPrises;k++){
Bouton btampon = new Bouton(x,y,color(0),color(220),adresses.keyArray()[k],adresses.valueArray()[k].substring(1),adresses.valueArray()[k].substring(0,1));
b.add(btampon);
if (x >= 775) {
y +=135;
x = 20;
} else {
x = x+ 125;
}
}
}
// ---------- Fonction permettant de stocker dans un dictionnaire de chaîne de caractère les informations relatives aux prises actuellement affichées sur l'interface -------
StringDict setAdresses(){
StringDict adresses = new StringDict();
for(Bouton button : b){
adresses.set(button.nom, button.etat + button.adresse);
}
println(adresses);
return adresses;
}
// ---------- Fonction qui sauvegarde dans le fichier original la configuration des prises actuelle -------
void sauvegardeAdresses (){
PrintWriter output;
try{
output = createWriter("adresses.txt");
StringDict adresses = setAdresses();
for(int i = 0; i< adresses.size() ; i++){
output.println(adresses.keyArray()[i] + " " + adresses.valueArray()[i].substring(1) + " " + adresses.valueArray()[i].substring(0,1)); //Stocke les prises sous la forme "nom adresse etat"
}
output.flush();
output.close();
}catch(Exception e){
System.out.println("Exception : "+e);
}
}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment