Browse Source

correction erreurs dans l'affichage des données et ajout attente d'initialisation de l'Arduino.

tags/PoDoCor-v0.2^2
lilian 2 years ago
parent
commit
0050c9fc5a
4 changed files with 52 additions and 30 deletions
  1. +1
    -1
      bin/data.py
  2. +4
    -4
      bin/figures.py
  3. +4
    -4
      bin/functions.py
  4. +43
    -21
      main.py

+ 1
- 1
bin/data.py View File

@@ -52,7 +52,7 @@ class Arduino_data():

coma = ","
capt.captor_name = str(input("Nom du capteur : "))
while(capt.captor_name.find_all(coma) != -1):
while(capt.captor_name.find(coma) != -1):
capt.captor_name = str(input("Nom du capteur ("," non accepté): "))
capt.unit = str(input("Unité : "))
while(capt.unit.find(coma) != -1):


+ 4
- 4
bin/figures.py View File

@@ -55,7 +55,7 @@ class Figures():
if(nb_plots > 6):
for i in range(6,nb_plots):
# 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])
self.repartition.append(self.repartition[((i+1)%6)-1])

def create_figure(self, titles_list):
"""Creation de la fenêtre contenant les plots.
@@ -64,8 +64,8 @@ class Figures():
actualiser les données."""
plt.ion()
self.fig, self.axes = plt.subplots(self.plots_grid[0], self.plots_grid[1])
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
if(self.plots_grid[0] < 2): # si 1 seule ligne de figures, 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]):
@@ -83,7 +83,7 @@ class Figures():
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])
self.axes[self.repartition[i]//100-1][(self.repartition[i]//10)%10-1].scatter(self.time, data_array_t[i], marker = '.')
plt.show()
plt.pause(0.05)



+ 4
- 4
bin/functions.py View File

@@ -56,7 +56,7 @@ def read_line_file(path):

def find_all(string, substring):

""" Méthode find mais retourne toutes les places au lieu d'une seule."""
""" Méthode find mais retourne toutes les occurences au lieu d'une seule."""

if(string.count(substring) == 0):
return -1
@@ -66,8 +66,8 @@ def find_all(string, substring):
else:
result = [string.find(substring)]
for i in range(string.count(substring)-1):
string = string[result[-1]+1:]
string.find(substring)
temp = string.find(substring) + result[-1]+1
temp_string = string[result[-1]+1:]
temp_string.find(substring)
temp = temp_string.find(substring) + result[-1]+1
result.append(temp)
return result

+ 43
- 21
main.py View File

@@ -24,7 +24,20 @@ data_buff_max = 10
data_buff_nb = 0
data_buff = ""
pressed_key = ''
flag_state = 1 # etat neutre

flag_erreur_serial = -1
flag_afficher_menu = 1
flag_enregistrer = 2
flag_afficher_ss_menu = 3
flag_choix_menu_principal = 4
flag_choix_ss_menu = 5
flag_init_arduino = 6

flag_state = 6 # etat initialisation, puis etat neutre (1)






#Programme principal
@@ -35,40 +48,49 @@ try:
arduino_ser = serial.Serial(serial_path, 9600) #communication avec Arduino
except serial.serialutil.SerialException:
print("SerialException : la carte Arduino n'est pas connectee ou est connectee sur au autre port (actuel : "+ serial_path+").")
flag_state = -1
flag_state = flag_erreur_serial
exit()
else:
arduino_data = data.Arduino_data()
arduino_data.add_captors_from_file(captors_path)
print("PoDoCor est pret a enregistrer les donnees")
print("\nPoDoCor a initialisé la communication avec l'Arduino.")

while(flag_state > 0):
if(flag_state == 1): #afficher le menu
if(flag_state == flag_init_arduino): #initialisation de l'arduino
print("\nInitialisation des capteurs Arduino, veuillez patienter.")
arduino_ser.flushInput()
arduino_ser.write(bytes('0','utf-8'))
time.sleep(5)
test = arduino_ser.readline()
print("Initialisation terminée, enregistrement possible.")
flag_state = flag_afficher_menu
arduino_ser.flushInput()
if(flag_state == flag_afficher_menu): #afficher le menu
print("_________________________________\n\nMAJ + P : Enregistrement des donnees\nMAJ + N : Gerer les capteurs\nMAJ + X : Arrêt du programme (ne fonctionne pas pendant l'enregistrement)\n_________________________________\n")
flag_state = 4
time.sleep(2) # attente de la bonne communication avec Arduino
elif(flag_state == 4): # appui clavier pour les choix du menu principal
flag_state = fc.press_key('XPN', [0, 2, 3], flag_state) #detection de touche pressee (demarrage procedure acquisition)
flag_state = flag_choix_menu_principal
elif(flag_state == flag_choix_menu_principal): # appui clavier pour les choix du menu principal
flag_state = fc.press_key('XPN', [0, flag_enregistrer, flag_afficher_ss_menu], flag_state) #detection de touche pressee (demarrage procedure acquisition)

elif(flag_state == 3): # afficher le ss-menu capteurs
elif(flag_state == flag_afficher_ss_menu): # afficher le ss-menu capteurs
print(" _________________________________\n MAJ + U : Lister les capteurs\n MAJ + A : Ajouter un capteur\n MAJ + E : Supprimer un capteur\n MAJ + T : Changer l'ordre des capteurs\n MAJ + Q : Menu principal\n _________________________________\n")
flag_state = 5
elif(flag_state == 5): # apui clavier pour les choix du ss-enu capteurs
flag_state = fc.press_key('AETUQ', [31, 32, 33, 34, 1], flag_state) #detection de touche pressee (demarrage procedure acquisition)
flag_state = flag_choix_ss_menu
elif(flag_state == flag_choix_ss_menu): # appui clavier pour les choix du ss-enu capteurs
flag_state = fc.press_key('AETUQ', [31, 32, 33, 34, flag_afficher_menu], flag_state) #detection de touche pressee (demarrage procedure acquisition)
if(flag_state == 31):
arduino_data.add_captor_manually(captors_path)
flag_state = 3
flag_state = flag_afficher_ss_menu
elif(flag_state == 32):
arduino_data.del_captor(captors_path)
flag_state = 3
flag_state = flag_afficher_ss_menu
elif(flag_state == 33):
arduino_data.change_captors_order(captors_path)
flag_state = 3
flag_state = flag_afficher_ss_menu
elif(flag_state == 34):
arduino_data.captors_print_list(captors_path)
flag_state = 3
flag_state = flag_afficher_ss_menu

elif(flag_state == 2): # enregistrement des données
elif(flag_state == flag_enregistrer): # enregistrement des données
titles_list = []
for i in range(arduino_data.nb_captor_signals):
titles_list.append(arduino_data.captors[i].captor_name)
@@ -79,7 +101,7 @@ while(flag_state > 0):
arduino_ser.flushInput()
print("Enregistrement en cours. Arrêtez avec MAJ + P.\n")
time_0 = time.time()-1
while(flag_state == 2): #boucle de reception des donnees
while(flag_state == flag_enregistrer): #boucle de reception des donnees
time_0 = time_0+1
time_1 = time_0+0.6
arduino_ser.write(bytes('1','utf-8')) #envoi de '1' a l'Arduino (acquisition donnees)
@@ -87,16 +109,15 @@ while(flag_state > 0):
arduino_ser.write(bytes('2','utf-8')) #envoi de '2' (réception donnees)
time.sleep(0.05)
raw_data_txt = arduino_ser.readline() #format des donnees: data1,data2,data3\n
#print(str(raw_data_txt)[2:-5])
if(raw_data_txt == ''): # si aucune donnée reçue
print("Arduino n'envoie aucune donnee, veuillez verifier le code televerse.")
flag_state = -1
flag_state = flag_erreur_serial
data_buff_nb = 0
else:
data_buff_nb +=1
data_buff = data_buff + str(raw_data_txt)[2:-5] + "\n" #add 1 data line in buffer
#procedure extraction donnees pour affichage
#print(str(raw_data_txt), "azerty")
#print(str(raw_data_txt))
arduino_data.extract_data_to_array(str(raw_data_txt)[2:-5])


@@ -108,7 +129,8 @@ while(flag_state > 0):
# plot
figures.plot_data(arduino_data.data_array)

flag_state = fc.press_key_timeout('P', [1], flag_state)

flag_state = fc.press_key_timeout('P', [flag_afficher_menu], flag_state)
time.sleep(max(time_0+1-time.time(), 0))

# while end


Loading…
Cancel
Save