繁体   English   中英

在获取数据之前清除串行缓冲区

[英]Clear serial buffer before acquiring data

我在 python 中创建了一个简短的脚本,它从 Arduino 读取传入的串行数据并将其写入 CSV 文件。 我在 Arduino 程序中创建了标题(数据标签),它们作为第一个字符串值传递并分配为列标题。 然而,由于某种原因,数据头前面有一小部分数据,我认为这些数据是 USB 串行缓冲区中的旧数据。 无论如何我可以告诉 python 等到旧数据被清除并且 Arduino 已重置串行连接?

代码如下所示,任何帮助将不胜感激。

问题快照

import serial
from datetime import datetime
import time
import pandas as pd
import random

a = input("Enter a:")
b = input("Enter b:")
c = input("Enter c:")
d = input("Enter d:")

fileName= a + "-" + b + "-" + c + "-" + d + ".csv" #name of the CSV file generated
arduino_port = "COM7"
baud = 115200
print_labels = False

file = open(fileName, "w", newline="")
print("Created file")

ser = serial.Serial(arduino_port, baud)
print("Connected to Arduino port:" + arduino_port)

line = 0 #start at 0 because our header is 0 (not real data)

while True:
    
    getData = (ser.readline().decode())
    data=getData[0:][:-1]
    now = datetime.now()
    dt_string = now.strftime("%d/%m/%Y %H:%M:%S")

    time.sleep(1)

    if data
    
    if line == 0:
        print(data)
        file = open(fileName, "a", newline="")
        file.write(data + "\n") #write data with a newline
        line = line+1
    else:
        print(data + "," + dt_string)
        file = open(fileName, "a", newline="")
        file.write(data + "," + dt_string + "\n") #write data with a newline
        line = line+1

print("Data collection complete!")
file.close()
  1. 如果新进程将这些数据变红,那么旧进程可能不会。 这是以前程序中的一个问题,它应该确保在关闭连接之前它接收到所有数据(通过等待 EOFError 或 '\0')。
  2. 在一个新过程中,我会跳过这些行,直到发现一些独特的标记(例如,开始从 '\n' 流式传输您的 csv (并将流式传输内容中的所有 '\n' 引用为 '\n')。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM