我正在研究一个传感器数据项目。我首先将传感器数据写入csv文件以保存它。之后,我读取文件并接收传感器数据作为如下列表:
[ 0 1 1 0 0 516]
[ 1 1 1 0 0 498]
[ 2 1 1 0 0 499]
[ 3 1 1 0 0 500]
[ 4 1 1 0 0 487]
[ 5 1 1 0 0 502]
...
元素之间没有逗号。我需要这个列表的最后一个元素来传输单位(模拟数据)。我测试了一些东西,例如创建一个数组并将其转换回列表等等…
这是我保存数据的方式(使用树莓派):
device.start(samplingRate, acqChannelsEDA)
with open('/home/pi/pywork/EDAdata.csv', 'w') as edafile:
# create csv writer
writer = csv.writer(edafile)
start = time.time()
end = time.time()
while (end - start) < running_time:
# Read samples
sampledata = device.read(nSamples)
writer.writerow(sampledata)
print(sampledata)
# print(eda_tf)
end = time.time()
edafile.close()
print(sampledata)的输出为:
[[8 1 1 0 0 0]]
[[9 1 1 0 0 0]]
[[10 1 1 0 0 0]]
[[11 1 1 0 0 0]]
[[12 1 1 0 0 0]]
[[13 1 1 0 0 0]]
[[14 1 1 0 0 0]]
[[15 1 1 0 0 0]]
这是read(self, nSamples=100)
的代码。获得sampledata
的方法。
dataAcquired = numpy.zeros((nSamples, 5 + nChannels), dtype=int)
for sample in range(nSamples):
Data = self.receive(number_bytes)
decodedData = list(struct.unpack(number_bytes * "B ", Data))
crc = decodedData[-1] & 0x0F
decodedData[-1] = decodedData[-1] & 0xF0
x = 0
for i in range(number_bytes):
for bit in range(7, -1, -1):
x = x << 1
if (x & 0x10):
x = x ^ 0x03
x = x ^ ((decodedData[i] >> bit) & 0x01)
if (crc == x & 0x0F):
dataAcquired[sample, 0] = decodedData[-1] >> 4
dataAcquired[sample, 1] = decodedData[-2] >> 7 & 0x01
dataAcquired[sample, 2] = decodedData[-2] >> 6 & 0x01
dataAcquired[sample, 3] = decodedData[-2] >> 5 & 0x01
dataAcquired[sample, 4] = decodedData[-2] >> 4 & 0x01
if nChannels > 0:
dataAcquired[sample, 5] = ((decodedData[-2] & 0x0F) << 6) | (decodedData[-3] >> 2)
if nChannels > 1:
dataAcquired[sample, 6] = ((decodedData[-3] & 0x03) << 8) | decodedData[-4]
if nChannels > 2:
dataAcquired[sample, 7] = (decodedData[-5] << 2) | (decodedData[-6] >> 6)
if nChannels > 3:
dataAcquired[sample, 8] = ((decodedData[-6] & 0x3F) << 4) | (decodedData[-7] >> 4)
if nChannels > 4:
dataAcquired[sample, 9] = ((decodedData[-7] & 0x0F) << 2) | (decodedData[-8] >> 6)
if nChannels > 5:
dataAcquired[sample, 10] = decodedData[-8] & 0x3F
else:
raise Exception(ExceptionCode.CONTACTING_DEVICE)
return dataAcquired
要获取列表的最后一个元素,应该使用负索引,例如
arr = [10, 20, 30, 40, 50]
print (arr[-1])
print (arr[-2])
输出:
50
40