我正在使用python 2.7 。 我从UART获取串行数据。
我正在尝试保存串行数据值以及接收数据时的实时数据。
从UART收到的数据格式如下:
2.1862745098X 2.42156862745X 2.42156862745X 0.401960784314X 0.0X 0.637254901961X 1.49019607843X ............等等
我使用以下代码保存值和时间:
f1 = open('accelerometer sensor1.txt','w')
while 1:
# Read from serial port, blocking
data =ser.read(1)
data1=(data)
# If there is more than 1 byte, read the rest
n = ser.inWaiting()
data1 = (data1 + ser.read(n))
l = data1.split( )
#t1 = datetime.datetime.now()
x = [d.strip("X") for d in l if d[len(d)-1] == "X"]
for i in range(0,len(x)):
f1.write(str(datetime.datetime.now()))
f1.write("\t")
f1.write(str(x[i]))
f1.write("\n")
我面临的问题是我在特定时间收到大量值。因此,当我保存数据时,它的格式为:
2014-09-22 11:30:40.980000 2.1862745098
2014-09-22 11:30:40.980000 2.42156862745
2014-09-22 11:30:40.980000 1.71568627451
2014-09-22 11:30:40.980000 0.401960784314
2014-09-22 11:30:40.980000 0.0
2014-09-22 11:30:40.980000 0.637254901961
2014-09-22 11:30:40.980000 1.49019607843
2014-09-22 11:30:40.980000 2.42156862745
2014-09-22 11:30:40.980000 2.5
2014-09-22 11:30:40.980000 1.58823529412
2014-09-22 11:30:40.980000 0.78431372549
2014-09-22 11:30:40.980000 0.0
2014-09-22 11:30:40.980000 0.196078431373
2014-09-22 11:30:40.980000 1.17647058824
2014-09-22 11:30:40.980000 1.74509803922
2014-09-22 11:30:40.980000 2.49019607843
2014-09-22 11:30:40.980000 2.44117647059
2014-09-22 11:30:40.980000 1.33333333333
2014-09-22 11:30:40.980000 0.558823529412
2014-09-22 11:30:40.980000 0.0
2014-09-22 11:30:40.980000 0.205882352941
2014-09-22 11:30:40.980000 1.43137254902
2014-09-22 11:30:40.980000 2.08823529412
我不希望采用这种格式,我想要收到的每个样本的实时时间,而不是实时收到的一组样本点。
我希望文本文件显示如下:
2014-09-22 11:30:40.980000 2.1862745098
2014-09-22 11:30:40.980010 2.42156862745
2014-09-22 11:30:40.980020 1.71568627451
2014-09-22 11:30:40.980030 0.401960784314
2014-09-22 11:30:40.980040 0.0
我该怎么办?请提出一些建议。
Thanks`
修改
我希望每个采样点都有不同的时间戳。这应该是可能的,因为每个采样点分别通过串行端口而不是组。我认为在阅读这些样本点时可能存在问题,如果我能以某种方式单独阅读它们,那么我的目的就会得到解决。
我尝试单独获取每个样本点。我能够这样做,但代码变得非常慢。 我刚刚做了
data =ser.readline(5)
data1=(data)
通过UART传递的值类型如下: 127X 154X 100X 158X 0X 20X .............
有没有办法单独读取值,也不会影响速度。
答案 0 :(得分:0)
我想你想在时间戳中得到数字的平均值。请查看此代码,它会聚合给定值,如果时间戳不同,则将其写入文件。
缓存变量应在循环外初始化; - )
cache = ('', 0, 0.0)
def aggregate(value):
now = str(datetime.datetime.now())
c_date, c_count, c_avg = cache
if now != c_date:
# write c_avg and c_date to file
f1.write(c_date)
f1.write("\t")
f1.write(str(c_avg))
f1.write("\n")
# after that, clear c_count and c_avg
c_count = 0
c_avg = 0.0
if c_count is 0:
c_count = 1
c_avg = float(value)
else:
c_avg = ((c_avg * c_count) + float(value)) / (c_count + 1)
c_count += 1
cache = (now, c_count, c_avg)
for i in range(0,len(x)):
aggregate(x[i])
我希望这能满足您的需求。
干杯