python - 在获取数据之前清除串行缓冲区
问题描述
我在 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()
解决方案
- 如果新进程将这些数据变红,那么旧进程可能不会。这是以前程序中的一个问题,它应该确保在关闭连接之前它接收到所有数据(通过等待 EOFError 或 '\0')。
- 在一个新的过程中,我会跳过这些行,直到发现一些独特的标记(例如,开始从 '\n' 流式传输您的 csv (并将流式传输内容中的所有 '\n' 引用为 '\n')。
推荐阅读
- c# - 不能在简单的控制台应用程序中使用 Console.Readline()?
- node.js - AWS - 如何从 NodeJs Lamda 中的令牌中获取用户名?
- javascript - 使元素 100% 为其祖父元素的宽度
- python - 如何通过重新排序重塑 numpy 数组?
- azure-ad-b2c - 无法获取段落 InputType 以在 Azure B2C IEF 中显示任何文本
- javascript - 如何在 Postman javascript 中从谷歌云存储 (GCS) 中读取 zip 文件中的内容
- unity3d - FPS 在场景中生成不好(多人游戏)
- typescript - How to write a unit test in Typescript?
- php - 关于字段 Googlemap 的 wordpress 问题的 acf
- linux - 将进程限制为特定数量的 CPU