将while循环中的变量结果存储到字典(python)
我有一个在raspberry pi上运行的程序,其中有两个输入,一个1Hz信号和一个50Hz信号。我记录从50Hz信号上升沿到1Hz信号上升沿所经过的时间,然后计算相位差。我希望键代表50Hz波形上升沿的当前时间,值是相对于1Hz信号的相位差 这是我的密码:将while循环中的变量结果存储到字典(python),python,while-loop,raspberry-pi,Python,While Loop,Raspberry Pi,我有一个在raspberry pi上运行的程序,其中有两个输入,一个1Hz信号和一个50Hz信号。我记录从50Hz信号上升沿到1Hz信号上升沿所经过的时间,然后计算相位差。我希望键代表50Hz波形上升沿的当前时间,值是相对于1Hz信号的相位差 这是我的密码: import pigpio import time import math from datetime import datetime counter = 0 1HZ_PIN = 23 50HZ_PIN = 24 pi = pigpio
import pigpio
import time
import math
from datetime import datetime
counter = 0
1HZ_PIN = 23
50HZ_PIN = 24
pi = pigpio.pi()
d = {}
pi.set_mode(1HZ_PIN, pigpio.INPUT)
pi.set_pull_up_down(1HZ_PIN, pigpio.PUD_UP)
pi.set_mode(50HZ_PIN, pigpio.INPUT)
pi.set_pull_up_down(50HZ, pigpio.PUD_UP)
while True:
if pi.wait_for_edge(1HZ_PIN, pigpio.RISING_EDGE):
print 'PPS Rising edge'
t1 = datetime.now()
print t1
counter = 0
while pi.wait_for_edge(50HZ_PIN, pigpio.RISING_EDGE) and counter <50):
d = {}
counter = counter + 1
print 'Voltage Sinusoid rising edge'
print datetime.now()
x = datetime.now()
x.isoformat() # I added this line as you can't place datetime objects in a dictionary
elapsed_time = x - t1
elapsed_time_float = elapsed_time.total_seconds() # can't prerform arithmetic operations on datetime object
phase = elapsed_time_float / 0.02/360
d[x] = phase
导入pigpio
导入时间
输入数学
从日期时间导入日期时间
计数器=0
1HZ_引脚=23
50HZ_引脚=24
pi=pigpio.pi()
d={}
pi.set_模式(1HZ_引脚,pigpio.INPUT)
pi.设置上下拉(1HZ引脚,pigpio.上拉)
pi.set_模式(50HZ_引脚,pigpio.INPUT)
pi.设置上下拉(50HZ,pigpio.上拉)
尽管如此:
如果pi.等待_边缘(1HZ_引脚,pigpio.上升_边缘):
打印“PPS上升沿”
t1=datetime.now()
打印t1
计数器=0
当pi.等待_边缘(50HZ_引脚,pigpio.上升_边缘)和计数器时,我认为您正在打印日期时间值:
print 'Voltage Sinusoid rising edge'
print datetime.now()
然后再次计算并将其保存在变量中:
x = datetime.now()
这两次可能不同。将其更改为:
x = datetime.now()
print x
应该有效,你应该得到匹配的打印和保存时间。我相信@user3811623有正确的答案。我还想指出——
- 正如@JerryStratton所提到的,您不会仅仅通过应用x.isoformat()来更改x的值,因为您还希望将值赋回x-
x=x.isoformat()
- 字典键不是按时间顺序排序的,为了保持键输入的顺序,您需要按顺序排列dict-
- 我觉得奇怪的是,当你在循环中启动它,从而重置它时,你的字典中得到了50个值李>
例如:
while true:
d={}
x=raw_input('> ')
d[k]=k
if k=='s':
break
与
屈服
>>>d
{'s': 's'}
不确定您在这里是如何得到50个键的。快速注释:变量不能以1HZ\u PIN
或50HZ\u PIN
这样的数字开头。另一个快速注释:x。isoformat()
不会将x转换为字符串。您需要将x.isoformat()的结果存储在另一个变量中。但是,您可以在Python中使用datetime对象作为键,这就是为什么您不会从错误中得到错误。您应该能够删除该行,而不会对代码产生任何影响。@Jerry Stratton我删除了该行,正如您所说,它没有任何影响,但为什么键与打印的上升沿时间不匹配。您希望我包括控制台的结果吗。字典里也没有键的顺序,因为我认为它们是按时间顺序排列的。不,键不是按时间顺序排列的。要以排序方式使用键,您需要拉动键并自行排序。您可以使用variable=d.keys()。()
>>>d
{'s': 's'}