adctest.py 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. from smbus2 import SMBus
  2. import pyqtgraph as pg
  3. from pyqtgraph.Qt import QtCore, QtGui
  4. import numpy as np
  5. import sys
  6. import time
  7. # 定数
  8. ADRS2040_ADDR=0x41
  9. ADRS2040_CMD_INVALID = 0
  10. ADRS2040_CMD_ADC_START = 1
  11. ADRS2040_CMD_ADC_STOP = 2
  12. ADRS2040_CMD_SET_RATE = 3
  13. ADRS2040_CMD_GET_COUNT = 4
  14. ADRS2040_CMD_GET_VALUE = 5
  15. class ADCGraph:
  16. def __init__(self):
  17. self.win = pg.GraphicsWindow()
  18. self.win.setWindowTitle('ADC Input')
  19. self.plt = self.win.addPlot()
  20. self.plt.setYRange(0,1024)
  21. self.curve = self.plt.plot(pen=(0, 0, 255))
  22. self.data = np.zeros(100)
  23. #
  24. # 開始
  25. self.i2c = SMBus(1)
  26. self.i2c.write_word_data(ADRS2040_ADDR, ADRS2040_CMD_SET_RATE, 50)
  27. self.i2c.write_byte(ADRS2040_ADDR, ADRS2040_CMD_ADC_START)
  28. self.timer = QtCore.QTimer()
  29. self.timer.timeout.connect(self.update)
  30. self.timer.start(10)
  31. def update(self):
  32. nod = 0
  33. nod = self.i2c.read_word_data(ADRS2040_ADDR,ADRS2040_CMD_GET_COUNT )
  34. for i in range(nod):
  35. value = self.i2c.read_word_data(ADRS2040_ADDR,ADRS2040_CMD_GET_VALUE)
  36. # print(value)
  37. self.data = np.delete(self.data, 0)
  38. self.data = np.append(self.data, value)
  39. self.curve.setData(self.data)
  40. if __name__ == "__main__":
  41. graphWin = ADCGraph()
  42. if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'):
  43. QtGui.QApplication.instance().exec_()