Advertisement
Guest User

Untitled

a guest
Mar 11th, 2021
16
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 18.28 KB | None | 0 0
  1. from PyQt5.QtCore import QDateTime, Qt, QTimer
  2. from PyQt5.QtWidgets import (QApplication, QCheckBox, QComboBox, QDateTimeEdit,
  3. QDial, QDialog, QGridLayout, QGroupBox, QHBoxLayout, QLabel, QLineEdit,
  4. QProgressBar, QPushButton, QRadioButton, QScrollBar, QSizePolicy,
  5. QSlider, QSpinBox, QStyleFactory, QTableWidget, QTabWidget, QTextEdit,
  6. QTableWidgetItem, QVBoxLayout, QWidget, QHeaderView)
  7. from PyQt5.QtGui import *
  8. import time
  9. import serial
  10. from QLed import QLed
  11.  
  12. from PyQt5 import uic, QtCore, QtWidgets
  13.  
  14. #import vrep
  15.  
  16.  
  17. import matplotlib
  18. matplotlib.use('Qt5Agg')
  19. from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg, NavigationToolbar2QT as NavigationToolbar
  20. from matplotlib.figure import Figure
  21. """
  22. arduinoData=serial.Serial('COM6',9600)
  23.  
  24. def led_on():
  25. arduinoData.write(b'1')
  26. def led_off():
  27. arduinoData.write(b'0')
  28. def led2_on():
  29. arduinoData.write(b'3')
  30. def led2_off():
  31. arduinoData.write(b'2')
  32. def led3_on():
  33. arduinoData.write(b'5')
  34. def led3_off():
  35. arduinoData.write(b'4')
  36. t=0
  37. while(t<3000000):
  38. t+=1
  39. led3_off()
  40. """
  41. class MplCanvas(FigureCanvasQTAgg):
  42. def __init__(self, parent=None, width=5, height=4, dpi=120):
  43. fig = Figure(figsize=(width, height), dpi=dpi)
  44. self.axes = fig.add_subplot(111)
  45. super(MplCanvas, self).__init__(fig)
  46.  
  47. class WidgetGallery(QDialog):
  48. def __init__(self, parent=None):
  49. super(WidgetGallery, self).__init__(parent)
  50. self.setFixedHeight(700)
  51. self.setFixedWidth(1300)
  52. styleComboBox = QComboBox()
  53.  
  54. styleLabel = QLabel("Style:")
  55.  
  56. self.useStylePaletteCheckBox = QCheckBox("&Use style's standard palette")
  57. self.useStylePaletteCheckBox.setChecked(True)
  58. disableWidgetsCheckBox = QCheckBox("&Disable widgets")
  59. self.createTopLeftGroupBox()
  60. self.createTopRightGroupBox()
  61. self.createBottomLeftTabWidget()
  62. self.bottomLeftTabWidget.setFixedHeight(220)
  63. self.createBottomRightGroupBox()
  64. self.createProgressBar()
  65.  
  66. topLayout = QHBoxLayout()
  67.  
  68. mainLayout = QGridLayout()
  69. mainLayout.addWidget(self.topLeftGroupBox, 1, 0)
  70. mainLayout.addWidget(self.topRightGroupBox, 1, 1)
  71.  
  72. mainLayout.addWidget(self.bottomLeftTabWidget, 2, 0)
  73. mainLayout.addWidget(self.bottomRightGroupBox, 2, 1)
  74. self.setLayout(mainLayout)
  75. self.setWindowTitle("Styles")
  76. self.changeStyle('Windows')
  77. self.label = QLabel(self)
  78. # self.label.setFont(QVBoxLayout.QFont("Sanserif", 15))
  79.  
  80. def changeStyle(self, styleName):
  81. QApplication.setStyle(QStyleFactory.create(styleName))
  82. self.changePalette()
  83.  
  84. def changePalette(self):
  85. if (self.useStylePaletteCheckBox.isChecked()):
  86. QApplication.setPalette(QApplication.style().standardPalette())
  87. else:
  88. QApplication.setPalette(self.originalPalette)
  89. def advanceProgressBar(self):
  90. curVal = self.progressBar.value()
  91. maxVal = self.progressBar.maximum()
  92. self.progressBar.setValue(curVal + (maxVal - curVal) // 100)
  93.  
  94. def createTopLeftGroupBox(self):
  95. self.topLeftGroupBox = QGroupBox("Dynamic Graph")
  96. self.sc = MplCanvas(self, width=5, height=4, dpi=120)
  97. self.toolbar = NavigationToolbar(self.sc, self)
  98.  
  99. # self.sc.resize(120,80)
  100. # self.sc.setMaximumHeight(500)
  101. self.sc.axes.set_position([0.1, 0.13, 0.85, 0.80])
  102. #self.sc.axes.legend(handletextpad=0.1)
  103. self.sc.axes.ymargin=0.1
  104. layout = QVBoxLayout()
  105. layout.addWidget(self.toolbar)
  106. layout.addWidget(self.sc)
  107.  
  108. # Create a placeholder widget to hold our toolbar and canvas.
  109. #widget = QtWidgets.QWidget()
  110. #widget.setLayout(layout)
  111. #self.setCentralWidget(widget)
  112.  
  113. self.show()
  114.  
  115. self.topLeftGroupBox.setLayout(layout)
  116.  
  117. def createBottomLeftTabWidget(self):
  118. self.bottomLeftTabWidget = QTabWidget()
  119. self.tab1 = QWidget()
  120. self.tab1.resize(1600,400)
  121. self.tableWidget = QTableWidget(5, 100)
  122. header = self.tableWidget.horizontalHeader()
  123. header.setSectionResizeMode(QHeaderView.Stretch)
  124. self.tableWidget.resize(120,80)
  125. self.tab1hbox = QHBoxLayout()
  126. self.tab1hbox.addWidget(self.tableWidget)
  127. self.tab1.setLayout(self.tab1hbox)
  128. self.bottomLeftTabWidget.addTab(self.tab1, "&Table")
  129.  
  130. def dialMoved(self):
  131. print(self.dial3.value())
  132. self.label.setText(" Dialer Value : " + str(getValue))
  133.  
  134. def createBottomRightGroupBox(self):
  135. self.bottomRightGroupBox = QGroupBox("Actuators")
  136. self.Button_Right = QPushButton("Act: 1")
  137. self.Button_Right.setCheckable(True)
  138. self.Button_Right.clicked.connect(self.Button_Right_Handler)
  139. self.Button_Left = QPushButton("Act: 2")
  140. self.Button_Left.setCheckable(True)
  141. self.Button_Left.clicked.connect(self.Button_Left_Handler)
  142. self.Button_Top = QPushButton("Act: 3")
  143. self.Button_Top.setCheckable(True)
  144. self.Button_Top.clicked.connect(self.Button_Top_Handler)
  145. self.Button_Roll = QPushButton("Act: Roll")
  146. self.Button_Roll.setCheckable(True)
  147. self.Button_Roll.clicked.connect(self.Button_Roll_Handler)
  148. layout2 = QVBoxLayout()
  149. layout2.addWidget(self.Button_Right)
  150. layout2.addWidget(self.Button_Left)
  151. layout2.addWidget(self.Button_Top)
  152. layout2.addWidget(self.Button_Roll)
  153. self.bottomRightGroupBox.setLayout(layout2)
  154.  
  155. def createTopRightGroupBox(self):
  156.  
  157.  
  158. self.topRightGroupBox = QGroupBox("Control Panel")
  159.  
  160. stopAllButton = QPushButton("Turn off the actuators")
  161. stopAllButton.setDefault(True)
  162. stopAllButton.clicked.connect(self.StopAll_Handler)
  163.  
  164. readForceButton=QPushButton("Read force values")
  165. readForceButton.setDefault(True)
  166. readForceButton.clicked.connect(self.readForce)
  167.  
  168.  
  169. readEncButton=QPushButton("Read encoder")
  170. readEncButton.setDefault(True)
  171. readEncButton.clicked.connect(self.readEncoder)
  172.  
  173. self.dial3 = QDial(self.topRightGroupBox)
  174. self.dial3.setMinimum(-125)
  175. self.dial3.setMaximum(125)
  176. self.dial3.setNotchesVisible(True)
  177.  
  178.  
  179.  
  180. layout = QVBoxLayout()
  181. layout.addWidget(stopAllButton)
  182. layout.addWidget(readForceButton)
  183. layout.addWidget(readEncButton)
  184. layout.addWidget(self.dial3)
  185.  
  186.  
  187. self.led1=QLed(self, onColour=QLed.Red, shape=QLed.Circle)
  188. self.led1.value=False
  189.  
  190. self.led2=QLed(self, onColour=QLed.Red, shape=QLed.Circle)
  191. self.led2.value=False
  192.  
  193. self.led3=QLed(self, onColour=QLed.Red, shape=QLed.Circle)
  194. self.led3.value=False
  195.  
  196. self.led4=QLed(self, onColour=QLed.Red, shape=QLed.Circle)
  197. self.led4.value=False
  198.  
  199. self.light = 0
  200.  
  201. layout.addWidget(self.led1)
  202. layout.addWidget(self.led2)
  203. layout.addWidget(self.led3)
  204. layout.addWidget(self.led4)
  205. layout.addStretch(1)
  206. self.topRightGroupBox.setLayout(layout)
  207.  
  208. def sendSerial(self):
  209. if ((self.dial3.value()>=5) or (self.dial3.value()<-5)):
  210. ser=serial.Serial('COM3',9600)
  211. buf = str(self.dial3.value()).encode("utf-8")
  212. ser.write(b'' + buf)
  213. ser.close()
  214. print(self.dial3.value())
  215. time.sleep(2)
  216. self.readEncoder()
  217. else:
  218. print("low value")
  219.  
  220. def readEncoder(self):
  221. ser=serial.Serial('COM3',9600)
  222. ser.write(b'254')
  223. ser.close()
  224.  
  225. print("Starting reading...")
  226.  
  227. ser=serial.Serial('COM3',9600, timeout=7)
  228. n_cnt = 0
  229. n_list = []
  230. enc_list = []
  231. enc_val1 = []
  232. enc_val2 = []
  233. enc_val3 = []
  234. enc_val4 = []
  235. zero_cnt = [0, 0, 0, 0, 0]
  236. while(n_cnt<=99):
  237. enc = ser.readline()
  238. enc_str = str(enc)
  239. if ("enc" in enc_str):
  240. enc_list = enc_str.split(":", 5)
  241. n_list.append(n_cnt)
  242. if int(enc_list[1])==0:
  243. zero_cnt[1] += 1
  244. enc_val1.append(enc_list[1])
  245. if int(enc_list[2])==0:
  246. zero_cnt[2] += 1
  247. enc_val2.append(enc_list[2])
  248. if int(enc_list[3])==0:
  249. zero_cnt[3] += 1
  250. enc_val3.append(enc_list[3])
  251. if int(enc_list[4])==0:
  252. zero_cnt[4] += 1
  253. enc_val4.append(enc_list[4])
  254. zero_cnt[0] += 1
  255. print(enc)
  256. n_cnt = n_cnt + 1
  257. ser.close()
  258. print("End")
  259. self.sc.axes.clear()
  260. #self.sc.axes.axis([0, 10, 0, 360])
  261. self.sc.axes.set_ylim(auto=True)
  262. if zero_cnt[1]<=n_cnt-1:
  263. self.sc.axes.plot(n_list, enc_val1)
  264. if zero_cnt[2]<=n_cnt-1:
  265. self.sc.axes.plot(n_list, enc_val2)
  266. if zero_cnt[3]<=n_cnt-1:
  267. self.sc.axes.plot(n_list, enc_val3)
  268. if zero_cnt[4]<=n_cnt-1:
  269. self.sc.axes.plot(n_list, enc_val4)
  270. if zero_cnt[0]!=0:
  271. for i in range(zero_cnt[0]):
  272. if i==0:
  273. self.tableWidget.setItem(0,0, QTableWidgetItem("data no:"))
  274. self.tableWidget.setItem(1,0, QTableWidgetItem("enc1:"))
  275. self.tableWidget.setItem(2,0, QTableWidgetItem("enc2:"))
  276. self.tableWidget.setItem(3,0, QTableWidgetItem("enc3:"))
  277. self.tableWidget.setItem(4,0, QTableWidgetItem("enc4"))
  278. else:
  279. self.tableWidget.setItem(0,i, QTableWidgetItem(str(i)))
  280. self.tableWidget.setItem(1,i, QTableWidgetItem(enc_val1[i-1]))
  281. self.tableWidget.setItem(2,i, QTableWidgetItem(enc_val2[i-1]))
  282. self.tableWidget.setItem(3,i, QTableWidgetItem(enc_val3[i-1]))
  283. self.tableWidget.setItem(4,i, QTableWidgetItem(enc_val4[i-1]))
  284. self.sc.axes.set_ylabel("Degrees")
  285. self.sc.axes.set_xlabel("Time, 100*milliseconds")
  286. self.sc.axes.set_title("Encoder measurements")
  287. self.sc.axes.set_yticks([0, 25, 50, 75, 100, 125, 150, 175])
  288. self.sc.axes.set_yticklabels(('0', '25', '50', '75', '100', '125', '150', '175'))
  289. #self.sc.axes.set_yticks([0, 50])
  290. #self.sc.axes.set_yticklabels(('0', '50'))
  291.  
  292. self.sc.draw()
  293. self.StopAll_Handler()
  294.  
  295. def readForce(self):
  296. ser=serial.Serial('COM3',9600)
  297. ser.write(b'255')
  298. ser.close()
  299.  
  300. print("Starting reading...")
  301.  
  302. ser=serial.Serial('COM3',9600, timeout=7)
  303. n_cnt = 0
  304. self.n_list = []
  305. enc_list = []
  306. self.enc_val1 = []
  307. self.enc_val2 = []
  308. self.enc_val3 = []
  309. zero_cnt = [0, 0, 0, 0]
  310.  
  311. self._plot_ref1 = None
  312. self._plot_ref2 = None
  313. self._plot_ref3 = None
  314.  
  315. self.show()
  316.  
  317. while(n_cnt<=99):
  318. enc = ser.readline()
  319. enc_str = str(enc)
  320. if ("fs" in enc_str):
  321. enc_list = enc_str.split(":", 5)
  322. self.n_list.append(n_cnt)
  323. if float(enc_list[1])==0.0:
  324. zero_cnt[1] += 1
  325. self.enc_val1.append(enc_list[1])
  326. if float(enc_list[2])==0.0:
  327. zero_cnt[2] += 1
  328. self.enc_val2.append(enc_list[2])
  329. if float(enc_list[3])==0.0:
  330. zero_cnt[3] += 1
  331. self.enc_val3.append(enc_list[3])
  332. if n_cnt>=10:
  333. self.update_plot()
  334. self.show()
  335.  
  336. #self.sc.refresh()
  337. self.sc.draw()
  338. print(enc)
  339. n_cnt = n_cnt + 1
  340. ser.close()
  341. print("End")
  342. self.sc.axes.clear()
  343. self.sc.axes.set_ylim(auto=True)
  344. #self.sc.axes.set_ylabel("Force, 0.01*Newtons")
  345. self.sc.axes.set_xlabel("Time, milliseconds", fontsize = 8)
  346. self.sc.axes.set_title("Force sensor measurements", fontsize = 8)
  347. #self.sc.axes.set_borders(bottom=0.1)
  348. #self.sc.axes.autoscale_view(True,True,True)
  349. #self.sc.axes.yticks(np.arange(0, 15, 1))
  350. #self.sc.axes.set(aspect=1,ylim=(0, 35))
  351. self.sc.axes.set_ylabel('Force, 0.01*Newtons', fontsize = 8)
  352.  
  353. if zero_cnt[1]<=n_cnt-1:
  354. self.sc.axes.plot(self.n_list, self.enc_val1)
  355. if zero_cnt[2]<=n_cnt-1:
  356. self.sc.axes.plot(self.n_list, self.enc_val2)
  357. if zero_cnt[3]<=n_cnt-1:
  358. self.sc.axes.plot(self.n_list, self.enc_val3)
  359. for i in range(n_cnt):
  360. if i==0:
  361. self.tableWidget.setItem(0,0, QTableWidgetItem("data no:"))
  362. self.tableWidget.setItem(1,0, QTableWidgetItem("FS1: *0.01 N"))
  363. self.tableWidget.setItem(2,0, QTableWidgetItem("FS2: *0.01 N"))
  364. self.tableWidget.setItem(3,0, QTableWidgetItem("FS3: *0.01 N"))
  365. else:
  366. self.tableWidget.setItem(0,i, QTableWidgetItem(str(i)))
  367. self.tableWidget.setItem(1,i, QTableWidgetItem(self.enc_val1[i-1]))
  368. self.tableWidget.setItem(2,i, QTableWidgetItem(self.enc_val2[i-1]))
  369. self.tableWidget.setItem(3,i, QTableWidgetItem(self.enc_val3[i-1]))
  370. self.sc.draw()
  371.  
  372. def Button_Right_Handler(self):
  373. if self.Button_Right.isChecked():
  374. self.led1.setValue(True)
  375. self.led1.repaint()
  376. self.sendType_1()
  377. self.label.setText(" Dialer Value : " + str(getValue))
  378. else:
  379. self.led1.value = False
  380. self.led1.repaint()
  381. self.sendStop_1()
  382. def Button_Left_Handler(self):
  383. if self.Button_Left.isChecked():
  384. self.led2.setValue(True)
  385. self.led2.repaint()
  386. self.sendType_2()
  387. self.label.setText(" Dialer Value : " + str(getValue))
  388. else:
  389. self.led2.value = False
  390. self.led2.repaint()
  391. self.sendStop_2()
  392. def Button_Top_Handler(self):
  393. if self.Button_Top.isChecked():
  394. self.led3.setValue(True)
  395. self.led3.repaint()
  396. self.sendType_3()
  397. self.label.setText(" Dialer Value : " + str(getValue))
  398. else:
  399. self.led3.value = False
  400. self.led3.repaint()
  401. self.sendStop_3()
  402. def Button_Roll_Handler(self):
  403. if self.Button_Roll.isChecked():
  404. self.led4.setValue(True)
  405. self.led4.repaint()
  406. self.sendType_4()
  407. self.label.setText(" Dialer Value : " + str(getValue))
  408. else:
  409. self.led4.value = False
  410. self.led4.repaint()
  411. self.sendStop_4()
  412. def StopAll_Handler(self):
  413. if self.Button_Right.isChecked():
  414. self.Button_Right.toggle()
  415. if self.Button_Left.isChecked():
  416. self.Button_Left.toggle()
  417. if self.Button_Top.isChecked():
  418. self.Button_Top.toggle()
  419. if self.Button_Roll.isChecked():
  420. self.Button_Roll.toggle()
  421. self.led1.value = False
  422. self.led1.repaint()
  423. self.led2.value = False
  424. self.led2.repaint()
  425. self.led3.value = False
  426. self.led3.repaint()
  427. self.led4.value = False
  428. self.led4.repaint()
  429. self.sendStopAll()
  430. def sendType_1(self):
  431. ser=serial.Serial('COM3',9600)
  432. ser.write(b'1')
  433. ser.close()
  434. time.sleep(1)
  435. print("act: Right")
  436. self.sendSerial()
  437. """
  438. time.sleep(12)
  439. self.led1.value = False
  440. self.led1.repaint()
  441. if self.Button_Right.isChecked():
  442. self.Button_Right.toggle()
  443. self.sendStop_1()
  444. """
  445. def sendType_2(self):
  446. ser=serial.Serial('COM3',9600)
  447. ser.write(b'2')
  448. ser.close()
  449. time.sleep(1)
  450. print("act: Left")
  451. self.sendSerial()
  452. """
  453. time.sleep(12)
  454. self.led2.value = False
  455. self.led2.repaint()
  456. if self.Button_Left.isChecked():
  457. self.Button_Left.toggle()
  458. self.sendStop_2()
  459. """
  460. def sendType_3(self):
  461. ser=serial.Serial('COM3',9600)
  462. ser.write(b'3')
  463. ser.close()
  464. time.sleep(1)
  465. print("act: Top")
  466. self.sendSerial()
  467. """
  468. time.sleep(12)
  469. self.led3.value = False
  470. self.led3.repaint()
  471. if self.Button_Top.isChecked():
  472. self.Button_Top.toggle()
  473. self.sendStop_3()
  474. """
  475. def sendType_4(self):
  476. ser=serial.Serial('COM3',9600)
  477. ser.write(b'4')
  478. ser.close()
  479. time.sleep(1)
  480. print("act: Roll")
  481. self.sendSerial()
  482. def sendStop_1(self):
  483. self.light = -1
  484. ser=serial.Serial('COM3',9600)
  485. ser.write(b'-1')
  486. ser.close()
  487. def sendStop_2(self):
  488. self.light = -2
  489. ser=serial.Serial('COM3',9600)
  490. ser.write(b'-2')
  491. ser.close()
  492. def sendStop_3(self):
  493. self.light = -3
  494. ser=serial.Serial('COM3',9600)
  495. ser.write(b'-3')
  496. ser.close()
  497. def sendStop_4(self):
  498. self.light = -4
  499. ser=serial.Serial('COM3',9600)
  500. ser.write(b'-4')
  501. ser.close()
  502. def sendStopAll(self):
  503. self.light = -5
  504. ser=serial.Serial('COM3',9600)
  505. ser.write(b'-5')
  506. ser.close()
  507.  
  508. def createProgressBar(self):
  509. self.progressBar = QProgressBar()
  510. self.progressBar.setRange(0, 10000)
  511. self.progressBar.setValue(0)
  512. timer = QTimer(self)
  513. timer.timeout.connect(self.advanceProgressBar)
  514. timer.start(1000)
  515.  
  516. if __name__ == '__main__':
  517. import sys
  518. app = QApplication(sys.argv)
  519. gallery = WidgetGallery()
  520. gallery.show()
  521. sys.exit(app.exec_())
  522.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement