我有一个在树莓派上运行的程序,其中有2个输入,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.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
我假设的最后一行将每个记录的上升沿时间作为键,相应的相位差作为值。但是当我按照预期打印列表中的50个键/值对时,它们与打印的上升沿时间不匹配。有没有一种正确的方法将变量从这个while循环放入字典?
答案 0 :(得分:1)
我认为您正在打印日期时间值:
print 'Voltage Sinusoid rising edge'
print datetime.now()
然后再次计算并将其保存在变量中:
x = datetime.now()
这两次可能会有所不同。将其更改为:
x = datetime.now()
print x
应该有效,你应该得到匹配的打印和保存时间。
答案 1 :(得分:0)
我相信@ user3811623有正确的答案。我也想指出 -
x = x.isoformat()
https://docs.python.org/3/library/collections.html#collections.OrderedDict
例如,这 -
while true:
d={}
x=raw_input('> ')
d[k]=k
if k=='s':
break
与
> t
> y
> u
> s
产量
>>>d
{'s': 's'}
不知道你在这里如何获得50把钥匙。