2011-01-08 16 views
2

나는 가속도계 MMA7361L에서받은 데이터를 저장하기 위해 다음 파이썬 코드를 사용하고 있습니다. 파일이 생성되었지만 쓰여지는 데이터가 없습니까?파이썬을 사용하여 텍스트 파일에 시리얼 데이터 저장

데이터 손실을 방지하려면 파일에 데이터를 저장해야합니다. 데이터는 내 가속도계를 연결하는 내 마이크로 컨트롤러 인 Arduino에서 전송합니다.

import serial 

port = serial.Serial('COM4', 9600) 

for i in range(0, 10): 
    abc=open('abc.txt', 'r+b') //append and binary(a+b) mode 
    x = port.read(size=1)// 1 byte 
    print x 
    abc.write(x) 
    abc.close() 

port.close() 
+1

코드 코멘트가 나타내는대로'a + b' 모드가 아니라'r + b' 모드로 파일을 여는 중입니다. 또한 바이너리 파일에 'txt'확장자를 부여하는 것은 혼란 스럽습니다. – aaronasterling

+0

미안 .. 무언가를 시도하고 B4를 업로드하는 것을 잊어 버렸습니다 .. 어쨌든 고맙습니다! – change

답변

1

파일 모드를 'ab'로 변경하면 제대로 작동합니다. a + b는 데이터를 추가하는 동안 내용을 읽는 경우에만 유용합니다.

심각한 최적화가 필요한 경우가 아니라면 처음에는 전체 파일을 읽고 'ab'모드로 다시 열기 만하면됩니다.

3
import serial 

addr = 'COM4' 
baud = 9600 
fname = 'accel.dat' 
fmode = 'ab' 
reps = 10 

with serial.Serial(addr,baud) as port, open(fname,fmode) as outf: 
    for i in range(reps): 
     x = port.read(size=1) 
     print x 
     outf.write(x) 
     outf.flush() 
0

이렇게하면됩니다. 지금 당장이 방법을 사용하고 있습니다. 또 다른 하나는 com 포트가 사용되고 있는지 알려주고 while 루프를 실행하고 com 포트가 존재하지 않으면 파일을 닫습니다.

수입 시리얼 CSV 가져 오기

파일 = raw_input을 ('으로 파일 저장 :') ('w', 파일) SAVEFILE = 오픈

하여 SerialPort = raw_input을 ('입력 포트 :') 포트 1

인쇄 "에 .... 연결"=하여 SerialPort,

아두 이노 = serial.Serial (포트 1, 9600)

포트

인쇄는 "아두 이노 감지"

진정한 동안 : 당신이 표시하고 time.sleep (0.01) 데이터 = arduino.readline() saveFile.write (데이터) 인쇄 데이터

관련 문제