У меня есть программа, работающая на малине pi, где есть 2 входа, 1 Гц и сигнал 50 Гц. Я записываю время, прошедшее от нарастающего фронта сигнала 50 Гц, к сигналу 1 Гц, а затем вычисляет разность фаз. Я хочу, чтобы ключ представлял текущее время нарастающего фронта 50Гц сигналов, а значение - разность фаз относительно сигнала 1 Гц.Сохранение переменных результатов из цикла while в словарь (python)
Вот мой код:
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 в словаре?
Быстрое примечание: переменные не могут начинаться с числа, например '1HZ_PIN' или' 50HZ_PIN' –
Еще одно примечание: 'x.isoformat()' не будет преобразовывать x в строку. Вам нужно сохранить результат x.isoformat() в другой переменной. Однако вы можете использовать объекты datetime как ключи в Python, поэтому вы не получаете ошибку из этой ошибки. Вы должны уметь удалить эту строку, не влияя на ваш код. –
@Jerry Stratton Я удалил эту строку, и, как вы сказали, это не повлияло, но почему ключи не соответствуют возрастающим фронтам, которые печатаются. Вы хотите, чтобы я включил результат с консоли. В словаре также нет порядка с ключами, поскольку я предполагал, что они будут в хронологическом порядке. –