我正在做一个学校项目,必须在一段时间内从插入arduino的加速度计读取值并将其写入csv文件。 为了提高读数的准确性,我将捕获器传输的所有值都放在一个列表中,每[X]秒执行一次平均值,然后将这些值存储到最终列表中,然后再将它们写入我的csv文件。 为此,我使用time.perf_counter()能够准确准确地知道何时收集这些值。
在1秒内启动1000个值的测试时,第一个值很好,除了有一点点漂移,但这并没有给我带来太大的麻烦。但是,在40值之后,读数间隔为0.01s而不是0.001s(这是可以预期的)
不确定它是否有任何价值,但我正在Pycharm上运行python 3.7。
import serial
import time
import csv
import numpy as np
ser = serial.Serial('COM5',9600)
while True:
print("Initialisation", end="")
time.sleep(0.2)
for x in range(0,3):
print(".", end="")
time.sleep(0.3)
entre=input('\nPress S to begin input or Q to quit')
if entre=='S':
del entre #On supprime entre pour boucle infinie
X=[]
Y=[]
Z=[]
total=[]
temps_de_mesure=1
nombre_de_mesure = 1000
intervalle_entre_2_mesures = temps_de_mesure/nombre_de_mesure #Recupèrer toutes les valeurs
t0 = time.perf_counter()
for x in range(0, nombre_de_mesure):
t_repeat = time.perf_counter()
liste_temporaire = [[], [], []]
while time.perf_counter()-t_repeat < 0.001:
temp = str(ser.readline())
temp = temp[2:-5]
temp = temp.split(';')
liste_temporaire[0].append(int(temp[0]))
liste_temporaire[1].append(int(temp[1]))
liste_temporaire[2].append(int(temp[2]))
t_moyenne=time.perf_counter()-t0
x_moyenne=np.mean(liste_temporaire[0])
y_moyenne=np.mean(liste_temporaire[1])
z_moyenne=np.mean(liste_temporaire[2])
total.append([t_moyenne,x_moyenne,y_moyenne,z_moyenne])
print(total) #affichage résultat
with open('acquision.csv','w', newline='') as csvFile: #Création d'un fichier csv acquisition avec les valeurs
writer=csv.writer(csvFile)
writer.writerows(total)
csvFile.close()
elif entre=='Q':break
ser.close()