Last active
April 22, 2024 17:18
-
-
Save ThibGiauffret/653bc3a9c6ea1c7a95d4fa49b3ab4f21 to your computer and use it in GitHub Desktop.
python_plot_serial
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import serial # Librairie pour récupérer les données de la communication série | |
import matplotlib.pyplot as plt # Librairie graphique | |
import drawnow # Librairie pour rafraîchir une figure matplotlib | |
my_title = 'Charge et décharge d\'un circuit RC' # Préciser ici votre titre de graphique | |
my_ylabel = 'Tension uC (V)' # Titre des ordonnées | |
my_xlabel = 'Nombre de points (1/500 ms)' # Titre des abscisses | |
my_style = 'ro-' # Style de la courbe matplotlib | |
nb_points = 30 # Nombre de points sur le graphique | |
arduino_port = '/dev/ttyUSB0' # Préciser ici le port série. Ex. : sous Windows "COM4", sous linux "/dev/ttyACM0" ou "/dev/ttyUSB0" | |
arduino_baudrate = 9600 # La fréquence de la communication série (baudrate). Doit être identique à celui du code .ino | |
# Fonction principale | |
def main(): | |
# Gestion de l'interruption (fermeture de la fenêtre) | |
def handle_close(evt): | |
arduinoData.flush() | |
arduinoData.close() | |
print('Closed Figure!') | |
fig = plt.figure() | |
fig.canvas.mpl_connect('close_event', handle_close) | |
data = [] # Liste des données | |
arduinoData = serial.Serial(arduino_port, arduino_baudrate) # Lancement de la communication série avec Arduino | |
plt.ion() # Mode interactif | |
cnt = 0 # Compteur du nombre de points | |
def makeFig(): # Fonction pour tracer le graphique | |
plt.ylim(0,5) | |
plt.title(my_title) | |
plt.grid(True) | |
plt.ylabel(my_ylabel) | |
plt.xlabel(my_xlabel) | |
plt.plot(data, my_style) | |
while True: | |
while (arduinoData.inWaiting()==0): # Vérification que l'on reçoit quelque chose | |
pass | |
arduinoString = arduinoData.readline() # Récupération du contenu de la ligne | |
try: | |
val = float(arduinoString.decode()) # Conversion str en float | |
data.append(val) # Ajout de la valeur à la liste data | |
drawnow.drawnow(makeFig) # Rafraichissement de la figure matplotlib | |
cnt=cnt+1 | |
if(cnt>nb_points): | |
data.pop(0) # Si plus de nb_points, enlever la première valeur de la liste data | |
except ValueError: # Gestion des erreurs de transmission (pour éviter les valeurs qui ne pourraient être converties en float) | |
print("Not a float") | |
# Fenêtre principale et appel de la fonction main | |
if __name__ == '__main__': | |
main() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment