2016-11-04 3 views
1

Я работаю над функцией, которая считывает строку с последовательного монитора arduino линейные выходы: Licht: 870 Temp: 19.01 при первом запуске функции, но после вызова функция опять читает пустую строкуpython 3 readline() дважды от серийного монитора arduino

вот мой код:

import serial 
import time 

class Serializer: 
def __init__(self, port, baudrate=9600, timeout=2): 
    self.port = serial.Serial(port = port, baudrate=baudrate, 
           timeout=timeout) 

def open(self): 
    ''' Open the serial port.''' 
    self.port.open() 

def close(self): 
    ''' Close the serial port.''' 
    self.port.close() 

def write(self, msg): 
    time.sleep(1.6) 
    self.port.write(msg.encode()) 

def recv(self): 
    return self.port.readline() 

вот мой код, чтобы получить темп или люкс:

def getLux(self): 
    lux = int(self.getTempLight()[1]) 
    print(lux) 

def getTemp(self): 
    temp = float(self.getTempLight()[3]) 
    print(temp) 

def getTempLight(self): 
    data =self.recv() 
    data = str(data) 
    list = data.split() 
    return list 

После вызова функции getTemp я хочу вызвать функцию getLux(), чтобы получить значение lux из той же строки, что и значение temp.

, например, из линии: Licht: 870 Temp: 19,01

я хочу значения 870 и 19,01 с функциями getTemp и getLux

ответ

0

Если вы преформ readline() на порт-объект будет потреблять одна линия. То есть если вы выполните второй readline(), он вернет следующую строку, отправленную вашим arduino, или пустую строку, если нет 2-й строки.

Таким образом, либо ваш ардуино посылает значения непрерывно, либо вы сохраняете строку чтения в вашем объекте Serializer.