#!/usr/bin/python3 import serial import matplotlib import matplotlib.pyplot as plt import matplotlib.animation as animation from collections import OrderedDict nb_bins = 128 baud_rate = 115200 port = "/dev/ttyACM0" bin_separator = ' ' val_separator = ':' def recv(link, nb_val): valid = False while not valid: line = link.readline().rstrip() try: line = line.decode("utf-8") except TypeError: valid = False continue raw_bins = line.split(bin_separator) valid = len(raw_bins) == nb_bins if not valid: continue bins = OrderedDict() for b in raw_bins: values = b.split(val_separator) valid = len(values) == 2 if not valid: continue bins[int(values[0])] = int(values[1]) return bins if __name__ == '__main__': link = serial.Serial(port, baud_rate) while 1: data = recv(link, nb_bins) x, y = list(data.keys()), list(data.values()) plt.cla() plt.hist(y, bins=x) plt.draw() plt.show(block=False)