0

私はこのようなプログラムpythonスクリプトを持っています、

import serial
import time

port = serial.Serial("/dev/ttyAMA0", baudrate=600, timeout= 3.0)

while True:
    rcv = port.read(5)
    value = (rcv)
    myString = str(value)
    b = open("/var/www/lampu1.txt","a")
    b.write(myString[1])
    b.close()

そのプログラムはシリアルからデータを受信でき、すべてのデータはファイル「lampu1.txt」に保存されます。受信したデータから1文字列データを取得してファイルに書き込みたいだけです。たとえば、データ受信 = 89435、文字列データを取得する方法、たとえば、文字列データ [2] = 9 を取得してファイル "lampu1.txt" に書き込みたい場合。このプログラムを実行するとエラーが発生するためです。これは端末で発生するエラーです。

Traceback (most recent call last):
File "terima.py", line 11, in <module>
b.write(myString[1])
IndexError: string index out of range

誰でもこの問題を解決するのを手伝ってくれます、、、ありがとう。

4

2 に答える 2

0

データ受信 = 89435、たとえば文字列データ [2] = 9 を取得してファイルに書き込みたい場合、文字列データを取得する方法...

文字列が の場合、 の文字は89435では[2]なく94です。文字列の最初の文字は at [0]、2 番目の文字は at など[1]です。Python でコーディングする場合は、インデックスを 0 から数えます。

また:

rcv = port.read(5)
value = (rcv)
myString = str(value)

rcv何かが欠けていない限り、valueここでは再割り当ては役に立ちません。これらの括弧でその型を変更していません。また、これらの 5 バイトをstr;として読み取るために 3 行を使用する必要がある理由はありません。ちょうどするmyString = str(port.read(5))

実際、ここでさえ必要ないかもしれませんstr()。シリアルポートから期待する情報に依存します-整数?アスキー文字?文字のみですか、それとも空白文字ですか? 等々。

これを試して、希望どおりになるかどうかを確認してください。

import serial
import time

port = serial.Serial("/dev/ttyAMA0", baudrate=600, timeout= 3.0)

while True:
    rcv = port.read(5)
    b = open("/var/www/lampu1.txt","a")
    try:
        b.write(rcv[0])
    except IndexError:
        pass
    b.close()

passタイムアウトする前にポートから 0 バイトが読み取られた場合の処理​​に使用する任意のロジックに置き換えることができます。ファイルを永遠に開いたり閉じたり開いたり閉じたりする何らかの理由がない限り、おそらくブロックの外にも移動する必要b.open()b.close()ありますが、ループを終了するロジックがなければ意味がないので、対処するために残しますwhileそれはあなた自身で。

于 2013-08-26T21:09:32.743 に答える
0
import serial
import time

port = serial.Serial("/dev/ttyAMA0", baudrate=600, timeout= 3.0)

while True:
    rcv = port.read(5)
    value = (rcv)
    myString = str(value)
    b = open("/var/www/lampu1.txt","a")
    #I want to output first character (0th entry)
    if (len(b) > 0):
        b.write(myString[0])
    else:
        b.write("Error condition")
    b.close()
于 2013-08-26T21:11:18.257 に答える