34

プログラムを使用して複数の文字を読み取ることができません。プログラムの何が問題なのかわかりません。

import serial

ser = serial.Serial(
    port='COM5',\
    baudrate=9600,\
    parity=serial.PARITY_NONE,\
    stopbits=serial.STOPBITS_ONE,\
    bytesize=serial.EIGHTBITS,\
        timeout=0)

print("connected to: " + ser.portstr)
count=1

while True:
    for line in ser.read():

        print(str(count) + str(': ') + chr(line) )
        count = count+1

ser.close()

ここに私が得る結果があります

connected to: COM5
1: 1
2: 2
3: 4
4: 3
5: 1

実際、私はこれを期待していました

connected to: COM5
1:12431
2:12431

上記のようなもので、1つずつではなく複数の文字を同時に読み取ることができます。

4

4 に答える 4

12

シリアルは一度に 8 ビットのデータを送信します。これは 1 バイトに変換され、1 バイトは 1 文字を意味します。

何らかの番兵に到達するまで文字をバッファーに読み込むことができる独自のメソッドを実装する必要があります。12431\n1行を示すようなメッセージを送るのが慣習です。

したがって、X 個の文字を格納するバッファを実装し、それに到達したらすぐ\nにその行で操作を実行し、次の行をバッファに読み込む必要があります。

バッファオーバーフローのケースに注意する必要があります。つまり、バッファよりも長い行が受信された場合などです...

編集

import serial

ser = serial.Serial(
    port='COM5',\
    baudrate=9600,\
    parity=serial.PARITY_NONE,\
    stopbits=serial.STOPBITS_ONE,\
    bytesize=serial.EIGHTBITS,\
        timeout=0)

print("connected to: " + ser.portstr)

#this will store the line
line = []

while True:
    for c in ser.read():
        line.append(c)
        if c == '\n':
            print("Line: " + ''.join(line))
            line = []
            break

ser.close()
于 2013-04-18T08:27:58.373 に答える