你好,我目前正在使用 python 3.6。我已经使用 pyserial 和 python 2.7 制作了几个应用程序。我想用 Python 3.6 做同样的事情。它不仅没有任何错误,而且也没有数据。
# -*- coding: utf-8 -*-
import serial
import time
ser=serial.Serial('/dev/ttyS1',9600)
ser.write('\nMerhaba Lutfen [y] veya [n] karakterlerinden birini tuslayiniz:
')
print ("Seri Haberlesme basliyor\n")
while 1:
karakter=ser.read()
if karakter == 'y':
print ("\nYes denildi\n")
ser.write( '\n[y] karakterini tusladiniz\n')
elif karakter == "n":
print ("\nNo denildi\n")
ser.write('\n[n] karakterini tusladiniz \n')
else:
print ("\nbelirlenemeyen bir karakter girisi\n")
ser.write('\nGirilen karakter =>')
ser.write(karakter)
ser.write('\nKarakter belirlenemedigi icin cevap alinmadi. [y]veya [n] karakterlerinden birini girin\n')
time.sleep(0.1)
答案1
尝试在执行任何读取或写入命令之前刷新输入缓冲区。
ser.flushInput()
答案2
我已经解决了这个问题。我使用了 ser.flush,但即使我没有使用它,程序也可以运行。我认为清除输入缓冲区会很好。我对代码做了一些补充。
# -*- coding: utf-8 -*-
import serial
import time
ser=serial.Serial('/dev/ttyS1',9600)
ser.flushInput( )
ser.write(b'\nMerhaba Lutfen [y] veya [n] karakterlerinden birini tuslayiniz: ')
print ("Seri Haberlesme basliyor\n")
while 1:
ser.flushInput()
karakter=ser.read().decode()
if karakter == 'y':
print ("\nYes denildi\n")
ser.flushInput()
ser.write( b'\n[y] karakterini tusladiniz\n')
elif karakter == "n":
print ("\nNo denildi\n")
ser.flushInput()
ser.write(b'\n[n] karakterini tusladiniz \n')
else:
print ("\nbelirlenemeyen bir karakter girisi\n")
ser.flushInput()
ser.write(b'\nGirilen karakter =>')
ser.flushInput()
ser.write(karakter.encode())
ser.flushInput()
ser.write(b'\nKarakter belirlenemedigi icin cevap alinmadi. [y]veya [n] karakterlerinden birini girin\n')
time.sleep(0.1)