from PyQt5.QtWidgets import QWidget, QFileDialog,QMainWindow, QLabel, QSizePolicy, QApplication, QAction, QHBoxLayout from PyQt5.QtCore import * from PyQt5 import QtCore, QtGui, QtWidgets import sys # 串口通信 import serial import time import threading import torch class Arduino_class(QtCore.QThread): sinOut = pyqtSignal(str) # 聲明一個帶字串參數的信號 def __init__(self, parent=None): super().__init__(parent) self.ser_com5 = serial.Serial('COM4', 9600, timeout=1) self.run_flag = False self.img_count=0 self.move_count=0 def run(self): time.sleep(2) print("Arduino 已連線") self.Home() while True: if self.run_flag: while True: message = self.ser_com5.readline().decode().strip() if message == "Turn_finsh": if self.img_count == 21: self.move_one_fov() else: time.sleep(0.02) self.sinOut.emit('Turn_finsh') if message == "Motor_finsh": if self.move_count <= 5: self.sinOut.emit('Motor_finsh') time.sleep(0.1) self.turn_one_angle() else: self.move_count = 0 self.sinOut.emit('end') if message == "Motor_in_End": print(message) self.sinOut.emit('Motor_finsh') if message == "Motor_in_Home": print(message) self.sinOut.emit('Motor_in_Home') self.run_flag = False break time.sleep(0.05) def start_run(self): print("已自動發送命令给Arduino!") self.run_flag = True self.turn_one_angle() def turn_one_angle(self): self.img_count = self.img_count+1 self.ser_com5.write(b'turn_one_angle\n') def move_one_fov(self): self.ser_com5.write(b'move_one_fov\n') self.move_count = self.move_count+1 self.img_count = 0 def Home(self): self.ser_com5.write(b'move_home\n') self.run_flag = True print("已自動發送命令给USB COM5!")