import serial, time, subprocess def _read(obj, samples, electrodes): data = [[]] * electrodes done = [False]*electrodes while (False in done): #line format is : line = obj.readline().rstrip() if type(line) == bytes: line = line.decode("ascii") try: number, value = [int(field) for field in line.split(":")] except ValueError: #discard the line if we don't get two ints pass else: if (not done[number]): data[number].append(value) for d in data: #done when length is bigger or equal to number of samples done[number] |= (len(d) >= samples) return data def read_serial(samples, electrodes): s = serial.Serial(port="/dev/ttyACM0") data = _read(s, samples, electrodes) s.close() return data def read_screenlog(samples, electrodes): subprocess.call(["screen", "-dm", "-L", "/dev/ttyACM0"]) time.sleep(1) f = open("screenlog.0", "r") data = _read(f, samples, electrodes) subprocess.call(["killall", "screen"]) subprocess.call(["rm", "screenlog.0"]) return data def plot_serial(): data_1 = read_serial(samples=1000, electrodes=1)[0] plot(data_1, color="blue") data_2 = read_serial(samples=1000, electrodes=1)[0] plot(data_2, color="green") plot_serial() plot_serial() plot_serial() def plot_screenlog(): data_1 = read_screenlog(samples=1000, electrodes=1)[0] plot(data_1, color="blue") data_2 = read_screenlog(samples=1000, electrodes=1)[0] plot(data_2, color="green") plot_screenlog() plot_screenlog() plot_screenlog()