Zdravím, poslední dva dny se trápím s komunikací přes sériovou linku a knihovnou pyserial a nemůžu se hnout z místa.
Abych byl konkrétní — mám desku s mikrokontrolérem ATMega8U2, který se skrze USB hlásí jako sériová linka (na Mac OS je to /dev/tty.usbmodem441) a chci do tohoto zařízení zapisovat i číst. Po připojení desky s ní mohu normálně komunikovat, např.: import serial s = serial.Serial('/dev/tty.usbmodem441', 57600, timeout=1) s.write('R') print s.read(size=6) s.write('S') print s.read(size=50) Problém je ten, že občas ze zařízení přečtu přesně to, co očekávám, občas ne, občas přečtu jen půlku. Zkoušel jsem různě nastavit 'timeout', ale bez úspěchu. Zkoušel jsem i něco takového: s.write('R') print s.read(size=s.inWaiting()) a s.write('R) while s.inWaiting(): print.s.read() ale zdá se, že funkce s.inWaiting() nevrací správné hodnoty, nebo se chová jinak než si myslím. Také jsem zkoušel mezi zápis a čtení vložit sleep(): s.write('R') time.sleep(1) print s.read(size=6) Chci se tedy zeptat — jaký je korektní způsob zápisu a čtení ze sériové linky, když předem nevím, kolik znaků mám přečíst? Je nějaký způsob, jak to zjistit? A co se stane, když do zařízení pouze zapíšu, ale již nepřečtu? Ztratí se přijatá data, nebo zůstanou někde v bufferu? Díky, V.S. _______________________________________________ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python