Dennis Lee Bieber wrote: > >> The really sad thing is that I get a perfectly constructed >> packet from the reading variable, and that gets butchered when I >> try to slice it up to pick out individual elements. Since >> pyserial doesn’t do anything to rearrange the data, then the >> CMUcam must do the heavy lifting of extracting a perfect packet >> from the data stream. It’s a real shame I couldn’t use it > > More likely it is running fast enough to keep up with the serial > port, and synchronizes on the "\rM". Your code seems to be reading in > bursts and somehow losing parts during your processing (which is > strange, I'd have expected pyserial to buffer some data between reads). > > Lacking that, I'd probably end up creating a thread to handle the > serial port reading, which basically looks like: > > while ser.read(1) != "\r": pass #synchronize > while not Done: > bfr = [] > while True: > c = ser.read(1) > bfr.append(c) > if c == "\r": break > queue.put("".join(bfr)) > > This should result in complete packets (from the "M" to a "\r")
Oh well. readline(eol="\r") will do that much better. while 1: data = ser.readline(eol="\r") args = data.split() if args[0] == "M": # command M; do something with args[1:] elif args[0] == "KK": # command KK; do something with args[1:] [.. process other commands ..] else: # Invalid command: might be an incomplete # packet. Just ignore it. pass -- http://mail.python.org/mailman/listinfo/python-list