2入力、1Hz信号、50Hz信号があるラズベリーパイでプログラムを実行しています。私は、50Hz信号の立ち上がりから1Hz信号の立ち上がりまでの経過時間を記録し、次に位相差を計算しています。私はキーが50Hz波形の立ち上がりの現在の時間を表し、その値が1Hz信号に対する位相差となるようにしたい。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個のキー/値のペアが予想通りに辞書に印刷されていますが、印刷された立ち上がり時間と一致しません。辞書からループ中に変数を配置する適切な方法はありますか?
クイックノート:変数は '1HZ_PIN'や' 50HZ_PIN'のような数字で始めることはできません –
もう一つの簡単なことですが、 'x.isoformat()'はxを文字列に変換しません。 xの結果を格納する必要があります。別の変数のisoformat()しかし、datetimeオブジェクトをPythonのキーとして使用することができます。そのため、間違いからエラーが発生することはありません。コードに影響を与えずにその行を削除できるはずです。 –
@Jerry Stratton私はその行を削除し、あなたが言ったように何の効果もありませんでしたが、なぜキーが印刷された立ち上がり時間に一致していません。コンソールから結果を含めるようにしますか?私は彼らが時系列順になるだろうと推測しているので、キーで辞書には順序はありません。 –