Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import serial
- import numpy as np
- from collections import deque
- import matplotlib
- matplotlib.use('TkAgg')
- from matplotlib import pyplot as plt
- # class that holds analog data for N samples
- class AnalogData:
- # constr
- def __init__(self, maxLen):
- self.ax = deque([0.0]*maxLen)
- self.maxLen = maxLen
- # ring buffer
- def addToBuf(self, buf, val):
- if len(buf) < self.maxLen:
- buf.append(val)
- else:
- buf.pop()
- buf.appendleft(val)
- def add(self, data):
- assert(len(data) == 1)
- self.addToBuf(self.ax, data[0])
- # plot class
- class AnalogPlot:
- def __init__(self, analogData):
- plt.ion()
- self.axline, = plt.plot(analogData.ax, 'bo')
- plt.ylim([0, 400])
- # update plot
- def update(self, analogData):
- self.axline.set_ydata(analogData.ax)
- plt.draw()
- # main() function
- def main():
- strPort = '/dev/cu.usbmodem1411'
- # plot parameters
- analogData = AnalogData(100)
- analogPlot = AnalogPlot(analogData)
- print('plotting data...')
- # open serial port
- ser = serial.Serial(strPort, 9600)
- print('work?')
- while True:
- try:
- ser.flushInput()
- line = ser.readline()
- try:
- data = [float(val) for val in line.split()]
- print(data)
- if(len(data) == 1):
- print('work2?')
- analogData.add(data)
- analogPlot.update(analogData)
- except:
- pass
- except KeyboardInterrupt:
- print('exiting')
- break
- # close serial
- ser.flush()
- ser.close()
- # call main
- if __name__ == '__main__':
- main()
Add Comment
Please, Sign In to add comment