Esempio n. 1
0
 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);
Esempio n. 2
0
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();