2016-06-30 17 views
0

私のコントローラは、シリアルポートを介して無線モジュールからデータを受信して​​います。タイムスタンプの信号として 'a'を使用して温度と湿度を1秒ごとに2桁に記録しています。例:ここではテキストファイルに保存されたデータが矛盾しています

a21.12 65.43 
a21.13 65.40 

は、私が使用しているコードです:

import serial 
import datetime 

connected = False 

locations=['/dev/ttyUSB0','/dev/ttyUSB1','/dev/ttyUSB2','/dev/ttyUSB3'] 

for device in locations: 
    try: 
     print "Trying...",device 
     ser = serial.Serial(device, 9600) 
     break 
    except: 
     print "Failed to connect on",device 

while not connected: 
    serin = ser.read() 
    connected = True 


with open('tempdata.txt', 'w') as text_file: 
    while 1: 
     if ser.read() is 'a': 
      text_file.write(datetime.datetime.now().strftime('%d/%m/%Y %H:%M:%S')) 
      text_file.write(" ") 
     x = ser.read() 
     text_file.write(x) 
     text_file.flush() 

ser.close() 

私はその後、私のテキストファイルをチェックすると、結果が毎回異なるようです。私はちょうど2または3秒間実行させると、私は時々正しい結果を得る、時々私は湿気を得る、時々私は半分の温度、半分の湿度(2.16.3のような)でタイムスタンプを取得します。私はそれを数秒以上実行すると、ファイルは完全に空白です。

私のコードの基礎は以前ここで尋ねられた質問から来て、タイムスタンプの部分を追加するまでうまくいきました。私は9600から4800に無線転送レートを変更しようとしましたが、それはちょうどガベージ文字に数字を有効にしました。

私はこれをRaspberry Pi 2モデルBで実行しています。そのため、短期間に多くのことを要求する可能性があります。

答えて

1

read()を2回呼び出して、2回目のコールの出力だけを書き込みます。私はそれがあなたの意図であるとは思わない。

あなたは、このセクションで変更できます。

with open('tempdata.txt', 'a') as text_file: 
    while 1: 
     content = ser.read() 
     if content is 'a': 
      text_file.write(datetime.datetime.now().strftime('%d/%m/%Y %H:%M:%S')) 
      text_file.write(" ") 
     text_file.write(content) 
     text_file.flush() 
+0

出力を固定するために本当によく働いた、そのためにあなたに感謝します。私はそれが3つまたは4つ以上のパルスのために動かせば私はまだ完全に空白のテキストファイルを得る。 – rambopanda

+0

おそらくモードを変更して ''a ''を追加したいと思っています – Nicarus

+0

これは、ありがとう – rambopanda

関連する問題