Browse Source

ajout commentaires et titres sur les graphes indiquant le nom des capteurs

tags/PoDoCor-v0.1
lilian 3 years ago
parent
commit
ca721a66dd
4 changed files with 32 additions and 6 deletions
  1. +1
    -1
      README.md
  2. +20
    -3
      bin/data.py
  3. +7
    -1
      bin/figures.py
  4. +4
    -1
      main.py

+ 1
- 1
README.md View File

@@ -47,7 +47,7 @@ Il est PRIMORDIAL de respecter l'ordre des données envoyées par l'Arduino dans

Une fois le logiciel démarré, le démarrage du processus d'enregistrement des données démarre en utilisant Shift+P; de même, ce processus s'arrête en utilisant Shift+P.

Une fenêtre s'afiche pour afficher les données transmises par l'Arduino en format graphique. Cette fenêtre ne permet pas, pour l'instant, de visualiser la valeur réelle des données (notamment pour les données raw), elle affiche simplement les données (raw ou réelles) reçues par PoDoCor.
Une fenêtre s'affiche pour afficher les données transmises par l'Arduino en format graphique. Cette fenêtre ne permet pas, pour l'instant, de visualiser la valeur réelle des données (notamment pour les données raw), elle affiche simplement les données (raw ou réelles) reçues par PoDoCor.

### TODO



+ 20
- 3
bin/data.py View File

@@ -14,17 +14,19 @@ class Arduino_data():
if(not(os.path.isdir(self.data_path_dir))): #creer dossier si non existant
os.mkdir(self.data_path_dir, 0o777)
self.raw_data_temp = [[]]
self.captors = []


def add_captors_from_file(self, file):
try:
"""Importation, à partir d'un fichier, des capteurs déjà enregistrés."""
try: # ouverture fichier
captors_file = open(file, "r")
except:
except: # si fichier non existant, création du fichier et ajout de capteur
print("Le fichier des capteurs n'existe pas encore. Ajoutez au moins 1 capteur:\n")
captors_file = open(file,"w") #création du fichier
captors_file.close()
self.add_captor_manually(file)
else:
else: # fichier existant
lines = captors_file.readlines()
self.nb_captor_signals = len(lines)
if(self.nb_captor_signals == 0):
@@ -39,10 +41,12 @@ class Arduino_data():
captor_line = lines[i]
capt = Captor_data();
capt.read_captor(captor_line)
self.captors.append(capt)
captors_file.close()
self.raw_data_temp = np.empty((1,self.nb_captor_signals))

def add_captor_manually(self, file):
"""Ajout manuel de capteurs (nom, unité, type de données (raw/real))"""
self.nb_captor_signals += 1
capt = Captor_data()

@@ -56,6 +60,7 @@ class Arduino_data():
capt.data_type = -1
while(capt.data_type <= -1 or capt.data_type >= 2):
capt.data_type = int(input("Type de données : 0 (raw) ou 1 (real): "))
self.captors.append(capt)

captors_file = open(file, "a")
captors_file.write(capt.captor_file_line())
@@ -65,6 +70,7 @@ class Arduino_data():
print("Capteur ajouté")

def captors_print_list(self, file):
"""Affichage des capteurs listés dans le fichier, dans l'ordre"""
captors_file = open(file, "r")
print(" Nom Unit Type(raw/real)")
for i in range(self.nb_captor_signals):
@@ -72,8 +78,10 @@ class Arduino_data():
captors_file.close()

def del_captor(self, file):
"""Suppression d'un capteur"""
self.captors_print_list(file)
captor_to_del = int(input("\nNumero du capteur a supprimer : "))-1
del self.captors[captor_to_del-1]
captors_file = open(file, "r")
lines = captors_file.readlines();
captors_file.close()
@@ -88,6 +96,9 @@ class Arduino_data():
self.nb_captor_signals = self.nb_captor_signals-1

def change_captors_order(self, file):
"""Changement de l'ordre des capteurs, pour correspondre à l'ordre des
valeurs correspondantes aux capteurs de l'Arduino"""
capt_temp = self.captors[:]
self.captors_print_list(file)
captors_file = open(file, "r")
lines = captors_file.readlines();
@@ -99,6 +110,7 @@ class Arduino_data():

captors_file = open(file, "w")
for i in range(self.nb_captor_signals):
self.captors[i] = capt_temp[captors_order[i]-1]
captor_line = lines[captors_order[i]-1]
captors_file.write(captor_line)
captors_file.close()
@@ -106,6 +118,8 @@ class Arduino_data():
self.captors_print_list(file)

def extract_data_to_array(self, raw_data_txt):
"""Lecture d'une ligne envoyée par Arduino, et parsing des données
par rapport aux virgules dans un tableau"""
coma = ","
coma_places = raw_data_txt.find(coma)
if(type(coma_places) == type(int())):
@@ -128,11 +142,14 @@ class Arduino_data():
self.data_array = np.append(self.data_array, self.raw_data_temp, axis=0)

def create_data_file(self):
"""Création du fichier csv où sont enregistrées les données, avec comme nom
l'horodatage du fichier"""
self.data_file_path = self.data_path_dir + "/" + time.asctime()+".csv"
file = open(self.data_file_path,"w") #mode append
file.close()

def append_data_to_file(self, data):
"""Écriture, à la fin du fichier csv, des données tampon"""
file = open(self.data_file_path,"a") #mode append
file.write(data)
file.close()


+ 7
- 1
bin/figures.py View File

@@ -13,6 +13,7 @@ class Figures():
self.fig = None # objet Figure()
self.axes = None # liste d'objets subplots(), suivant la grille plots_grid definie
self.time = None # axe x des figures (pas dans data_array car reextractible dans un tableur)
self.titles = []

def plots_grids(self, nb_plots):
""" Determine la grille (x,y) de fenêtres de plots dans la figure affichée.
@@ -56,7 +57,7 @@ class Figures():
# parcours des cases de la figure de droite à gauche puis de haut en bas, suivant la grille
self.repartition.append(self.repartition[i%self.nb_curves])

def create_figure(self):
def create_figure(self, titles_list):
"""Creation de la fenêtre contenant les plots.
Mode interactif enclenché pour réactualiser à chaque fois que plot_data est
appelée. Utilisation de plt.pause pour laisser la fenêtre s'afficher et
@@ -66,6 +67,10 @@ class Figures():
if(self.plots_grid[0] < 2): # si 1 seule ligne, empaqueter dans une liste pour
# y acceder de la meme facon dans tous les cas
self.axes = [self.axes]
for j in range(self.plots_grid[0]):
for i in range(self.plots_grid[1]):
self.titles.append(", ".join(titles_list[j*self.plots_grid[1]+i::self.total_subplots]))
self.axes[j][i].title.set_text(self.titles[j*self.plots_grid[1]+i])
plt.show()
plt.pause(0.05)

@@ -76,6 +81,7 @@ class Figures():
self.time = np.linspace(0,data_array_t.shape[1]-1,data_array_t.shape[1])
for i in self.repartition:
self.axes[i//100-1][(i//10)%10-1].clear()
self.axes[i//100-1][(i//10)%10-1].title.set_text(self.titles[(i//100-1)*self.plots_grid[1]+(i//10)%10-1])
for i in range(self.nb_curves):
self.axes[self.repartition[i]//100-1][(self.repartition[i]//10)%10-1].scatter(self.time, data_array_t[i])
plt.show()


+ 4
- 1
main.py View File

@@ -65,8 +65,11 @@ while(flag_state > 0):
flag_state = 3

elif(flag_state == 2): # enregistrement des données
titles_list = []
for i in range(arduino_data.nb_captor_signals):
titles_list.append(arduino_data.captors[i].captor_name)
figures = fig.Figures(arduino_data.nb_captor_signals)
figures.create_figure()
figures.create_figure(titles_list)
data_buff_nb = 0
arduino_data.create_data_file()
time_0 = time.time()-1


Loading…
Cancel
Save