Skip to content

Instantly share code, notes, and snippets.

@ThibGiauffret
Last active April 22, 2024 17:18
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save ThibGiauffret/653bc3a9c6ea1c7a95d4fa49b3ab4f21 to your computer and use it in GitHub Desktop.
Save ThibGiauffret/653bc3a9c6ea1c7a95d4fa49b3ab4f21 to your computer and use it in GitHub Desktop.
python_plot_serial
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