我正在开展一个项目,在这个项目中,我必须从一个小小的2.0(我用arduino编程)收集电压并将这些电压发送到Python。我还必须发送微秒数据。我正在使用PySerial与青少年交流。我首先将所有数据读入一个长度为3998的数组。我有另外两个数组,一个跟踪微秒的timeData
数组,以及跟踪电压的radarData
数组。每个数组携带一半数据,或1999点。
SerialData的示例部分:
b'1468095384\r\n'
b'0.01\r\n'
这将重复1999次。 Python代码接受这些输入并将它们写入“SerialData”数组。读完所有数据后,它将所有点分成两个数组,如下所示:
for i in range (0,3998):
if(i % 2 == 0):
radarData[samples] = float(str(SerialData[i], 'utf-8'))
samples = samples + 1
else:
timeData[samples1] = float(str(SerialData[i], 'utf-8'))
samples1 = samples1 + 1
Sample和Sample1是计数器变量。
从打印出float(str(SerialData[i], 'utf-8'))
,我知道将字符串解析为浮点数有效,但每当我打印出radarData[samples]
或timeData[samples]
时,我只看到0.我做错了什么?任何帮助表示赞赏。
谢谢!
答案 0 :(得分:0)
我怀疑你有一个关于列表如何工作的错误前提让你搞砸了。这有效:
SerialData = [ b'468095384\r\n', b'0.01\r\n'] * 10
radarData = []
timeData = []
for i in range(0,len(SerialData)):
if(i % 2 == 0):
radarData.append(float(str(SerialData[i], 'utf-8')))
else:
timeData.append(float(str(SerialData[i], 'utf-8')))
print(radarData)
print(timeData)
(当我们要求MCVE)
时,这就是我们的意思我将代码更改为附加到空列表并删除了样本索引。
似乎你的代码工作SerialData
需要已经是一个包含len(SerialData)
(或更多)项目的已分配列表。
如果您在脚本退出时正在运行SerialData[samples]
,那么您正在查看列表中某种预先初始化的项目。你看时samples
有什么价值?
这是我的输出:
[468095384.0, 468095384.0, 468095384.0, 468095384.0, 468095384.0, 468095384.0, 468095384.0, 468095384.0, 468095384.0, 468095384.0]
[0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01]
为了好玩:
serialData = [ b'468095384\r\n', b'0.01\r\n'] * 10
tmp = list(map(lambda d: float(d), serialData))
radarData = tmp[0::2]
timedata = tmp[1::2]
print(radarData)
print(timeData)