from serial import Serial from interfaces.Protocol.sadapmap_pb2 import MultiChannelReading, ReqMultiChannelReading class InstrumentInterface(object): def __init__(self, logger, location, channels): self.channels = channels self.logger = logger logger("[ARDUINO]", "Opening serial port...") try: self.ser = Serial(location, 115200, timeout=0.05) except Exception as e: logger("[ARDUINO]", "ERROR: Could not open serial port") raise FileNotFoundError("Serial port not found") from e logger("[ARDUINO]", "Board started, good luck!") def read(self): pass def readAll(self): self.ser.flushInput() # Limpeza do buffer de entrada req = ReqMultiChannelReading() [req.id.append(i['id']) for i in self.channels] self.ser.flushInput() self.ser.write(req.SerializeToString()) reading = MultiChannelReading() data = self.ser.read(128) try: reading.ParseFromString(data) except: self.logger("[ARDUINO]", "Got invalid data") return [0 for i in range(len(self.channels))] if len(reading.channels) != len(self.channels): self.logger("[ARDUINO]", "Got null data") return [0 for i in range(len(self.channels))] return [i.value for i in reading.channels]