SerialManager.py 3.74 KB
Newer Older
Alisson Claudino's avatar
Alisson Claudino committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
#      Classe SerialManager                                                                                 #
#      Autor: Alisson Claudino (alisson.claudino@ufrgs.br) -> https://lief.if.ufrgs.br/~itsalissom          #
#      Licença: GNU GPLv2                                                                                   #
#      Propósito: Estabelecer comunicação com o hardware do sistema, adquirindo as medidas brutas           #
#      dos sensores                                                                                         #
#                                                                                                           #
#                                                                                                           #
# Observações:                                                                                              #
#                                                                                                           #
#       O construtor da classe obtém a lista de portas seriais disponíveis e armazena em um array para      #
#   possibilitar que o usuário escolha qual porta utilizar.                                                 #
#       O buffer de entrada é limpado a cada leitura para que a leitura realizada seja de tempo real        #
#   independente da amostragem. Caso não fosse limpo, valores anteriores iriam interferir nas               #
#   medidas (oversampling).                                                                                 #
#                                                                                                           #
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #

#Importação de bibliotecas
20 21 22
import serial
import serial.tools.list_ports
import time
23
from PyQt5 import QtWidgets
24

25
class SerialManager(object):
26

27 28 29
    def __init__(self, type): #Construtor da classe

        self.type = type
Alisson Claudino's avatar
Alisson Claudino committed
30 31 32
        self.portList = serial.tools.list_ports.comports() #Armazena a lista de portas em um array

        self.portNum=len(self.portList) #Imprime no stdout a lista de portas disponíveis
33 34 35
        for i in range (0,self.portNum):
            print(self.portList[i].device)

Alisson Claudino's avatar
Alisson Claudino committed
36 37
    def startPort(self,port,baud):  #Inicializador da conexão com a porta e baudrate definidos
        self.ser = serial.Serial(port, baud)
38 39 40
        self.ser.setDTR(False)  # Reset do arduino para reinicio da leitura
        time.sleep(0.022)
        self.ser.setDTR(True)
41 42 43 44 45 46 47 48 49 50 51 52

        print(self.ser.readline())

        if(self.type == 0):
            #while(self.ser.inWaiting()==0):
            self.ser.write(bytes("press",'utf-8'))
        elif(self.type == 1):
            self.ser.write(bytes("temp",'utf-8'))
        elif(self.type==2):
            self.ser.write(bytes("proc",'utf-8'))
        if(self.ser.inWaiting() > 0):
            print(self.ser.readline())  # Primeiro valor da serial sai com lixo
53

Alisson Claudino's avatar
Alisson Claudino committed
54
    def read(self): #Função para realizar a leitura do valor atual na serial.
55 56
        if(self.ser.inWaiting()==0):
            pass
Alisson Claudino's avatar
Alisson Claudino committed
57 58
        self.ser.flushInput()      #Limpeza do buffer de entrada
        return self.ser.readline()  #Leitura de todos os valores em uma linha
59

Alisson Claudino's avatar
Alisson Claudino committed
60
    def serialListPanel(self, uiWindow): #Função para disponibilizar a lista de portas na interface
61
        uiWindow.usb = []
Alisson Claudino's avatar
Alisson Claudino committed
62
        for i in range(0, len(self.portList)): #As portas vão sendo adicionadas uma a uma
63 64 65
            uiWindow.usb.append(QtWidgets.QAction(uiWindow.MainWindow))
            uiWindow.usb[i].setText(self.portList[i].device)
            uiWindow.usb[i].setCheckable(True)
Alisson Claudino's avatar
Alisson Claudino committed
66
            uiWindow.serialMenu.addAction(uiWindow.usb[i])