Guest User

Untitled

a guest
Jun 24th, 2018
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.71 KB | None | 0 0
  1. import serial
  2. import numpy as np
  3. from collections import deque
  4. import matplotlib
  5. matplotlib.use('TkAgg')
  6. from matplotlib import pyplot as plt
  7.  
  8.  
  9. # class that holds analog data for N samples
  10. class AnalogData:
  11. # constr
  12. def __init__(self, maxLen):
  13. self.ax = deque([0.0]*maxLen)
  14. self.maxLen = maxLen
  15.  
  16. # ring buffer
  17. def addToBuf(self, buf, val):
  18. if len(buf) < self.maxLen:
  19. buf.append(val)
  20. else:
  21. buf.pop()
  22. buf.appendleft(val)
  23.  
  24. def add(self, data):
  25. assert(len(data) == 1)
  26. self.addToBuf(self.ax, data[0])
  27.  
  28.  
  29. # plot class
  30. class AnalogPlot:
  31. def __init__(self, analogData):
  32. plt.ion()
  33. self.axline, = plt.plot(analogData.ax, 'bo')
  34. plt.ylim([0, 400])
  35.  
  36. # update plot
  37. def update(self, analogData):
  38. self.axline.set_ydata(analogData.ax)
  39. plt.draw()
  40.  
  41.  
  42. # main() function
  43. def main():
  44.  
  45. strPort = '/dev/cu.usbmodem1411'
  46.  
  47. # plot parameters
  48. analogData = AnalogData(100)
  49. analogPlot = AnalogPlot(analogData)
  50.  
  51. print('plotting data...')
  52.  
  53. # open serial port
  54. ser = serial.Serial(strPort, 9600)
  55. print('work?')
  56. while True:
  57. try:
  58. ser.flushInput()
  59. line = ser.readline()
  60. try:
  61. data = [float(val) for val in line.split()]
  62. print(data)
  63. if(len(data) == 1):
  64. print('work2?')
  65. analogData.add(data)
  66. analogPlot.update(analogData)
  67. except:
  68. pass
  69. except KeyboardInterrupt:
  70. print('exiting')
  71. break
  72. # close serial
  73. ser.flush()
  74. ser.close()
  75.  
  76. # call main
  77. if __name__ == '__main__':
  78. main()
Add Comment
Please, Sign In to add comment