def __init__(self): QMainWindow.__init__(self); self.setupUi(self); self.data = ''; #string-type self.actionHistory.triggered.connect(self.showHistory); self.history = HistoryWidget(); self.thread = threading.Thread(target = self.fetchData); self.thread.setDaemon(True); self.thread.start(); self.reception.connect(self.parseData); self.calcComplete.connect(self.writeServo); self.setWindowTitle('AudioLocator'); self.ser = None; #set sensor value here. Will propagate to other widgets self.sensors = [ (inToM(48),inToM(0)), (inToM(0),inToM(-41)), (inToM(0),inToM(42)), (inToM(-48),inToM(0)), ]; self.locator = Locator.Locator(self.sensors); self.screen.setSensors(self.sensors); self.history.screen.setSensors(self.sensors);
class AudioLocator(QMainWindow,mainUI.Ui_AudioLocator): reception = pyqtSignal(); calcComplete = pyqtSignal(tuple); def __init__(self): QMainWindow.__init__(self); self.setupUi(self); self.data = ''; #string-type self.actionHistory.triggered.connect(self.showHistory); self.history = HistoryWidget(); self.thread = threading.Thread(target = self.fetchData); self.thread.setDaemon(True); self.thread.start(); self.reception.connect(self.parseData); self.calcComplete.connect(self.writeServo); self.setWindowTitle('AudioLocator'); self.ser = None; #set sensor value here. Will propagate to other widgets self.sensors = [ (inToM(48),inToM(0)), (inToM(0),inToM(-41)), (inToM(0),inToM(42)), (inToM(-48),inToM(0)), ]; self.locator = Locator.Locator(self.sensors); self.screen.setSensors(self.sensors); self.history.screen.setSensors(self.sensors); def showHistory(self): self.history.show(); def fetchData(self): with serial.Serial(port='/dev/ttyACM0',baudrate=9600) as ser: self.ser = ser; while True:#self.ser._isOpen: self.data = str(self.ser.readline()); self.reception.emit(); def writeServo(self,pt): x,y = pt[0],pt[1]; print(pt); theta = math.atan2(y,x); theta = int(-math.degrees(theta)/2) % 360; theta = str(theta); print(theta); self.ser.write(theta.encode()); def parseData(self): reg = r"\[(.*)\s(.*)\s(.*)\s(.*)(?:\s*)?\](?:\s*)?"; #4 time vals ptrn = re.compile(reg); m = ptrn.search(self.data); pts = []; try: l = [m.group(1),m.group(2),m.group(3),m.group(4)]; for i in range(4): x,y = self.locator.locate(l,i); pts.append((x,y)); xEdit = getattr(self,('x'+str(i+1)+'Edit')); yEdit = getattr(self,('y'+str(i+1)+'Edit')); xEdit.setText(repr(x)); yEdit.setText(repr(y)); self.update(); self.history.memorize(pts); vPts = list(filter(lambda p: not (math.isnan(p[0]) or math.isnan(p[0])), pts)); self.screen.setCandidate(vPts); p = getAvg(getPair(vPts)); self.calcComplete.emit(p); self.screen.setLoc(p); except AttributeError: pass; def update(self): QMainWindow.update(self); self.screen.update(); def paintEvent(self,event): QMainWindow.paintEvent(self,event); def closeEvent(self,event): QMainWindow.closeEvent(self,event); self.history.close(); event.accept();