###前提
ラズパイで17ピンに入力があると12ピンからパルスが,
22ピンに入力があると13ピンからパルスがでるようなプログラムを作成したいです
実現したいこと
①17ピン:オン→12ピン:パルス→17ピン:オフ→12ピン:パルスストップ
②22ピン:オン→13ピン:パルス→22ピン:オフ→13ピン:パルスストップ
17ピンと22ピンは外部からの電圧を受け取り,①,②の状況を作り出せるようにしたいです.
17ピンと22ピンが同時にオンになることはありません,同時にオフになることはあります.
発生している問題・エラーメッセージ
一回目で発生させた方のパルスしか発生しなくなります.
ex)
一回目で12ピンの方で出力させるとそれ以降13ピンからは出力されません.
12ピンの出力は17ピンのオンオフによってパルス出力→ストップは可能です.
該当のソースコード
Python
1import pigpio 2import time 3 4pwm_pinCW = 12 #赤 5pwm_pinCCW = 13 #オレンジ 6input_pinCW = 17 #黄色 7input_pinCCW = 6#紫 8 9freq1 = 1000 10freq2 = 1000 11duty =50 12cnv_dutycycle = int((duty*1000000/100)) 13 14pi = pigpio.pi() 15 16pi.set_mode(pwm_pinCW,pigpio.OUTPUT) 17pi.set_mode(pwm_pinCW,pigpio.OUTPUT) 18pi.set_pull_up_down(input_pinCW,pigpio.PUD_DOWN) 19pi.set_pull_up_down(input_pinCCW,pigpio.PUD_DOWN) 20 21def pulse_generatorCW(pwm_pinCW): 22 global freq1 23 print("CWstart") 24 while True: 25 detect_pin = pi.read(input_pinCW) 26 if detect_pin==0: 27 freq1 = 1000 28 print("break") 29 break 30 else: 31 if freq1<10000: 32 freq1 += 100 33 pi.hardware_PWM(pwm_pinCW,freq1,cnv_dutycycle) 34 time.sleep(0.01) 35 print(freq1) 36 else: 37 freq=10000 38 print("return") 39 return 40 41def generatorCW(input_pinCW,level,tick): 42 pulse_generatorCW(pwm_pinCW) 43 44 45 46def pulse_generatorCCW(pwm_pinCCW): 47 print("CCW") 48 global freq2 49 50 while True: 51 detect_pin = pi.read(input_pinCCW) 52 if detect_pin==0: 53 freq2 = 1000 54 print("break") 55 return 56 else: 57 if freq2<10000: 58 freq2 += 20 59 pi.hardware_PWM(pwm_pinCCW,freq2,cnv_dutycycle) 60 time.sleep(0.000000001) 61 print(freq2) 62 else: 63 freq2=10000 64 print("retrun") 65 return 66 67 68def generatorCCW(input_pinCCW,level,tick): 69 pulse_generatorCCW(pwm_pinCCW) 70 71 72def stop(): 73 global freq1 74 global freq2 75 76 pi.write(pwm_pinCW,0) 77 pi.write(pwm_pinCCW,0) 78 79 80def main(): 81 cl = pi.callback(input_pinCW,pigpio.RISING_EDGE,generatorCW) 82 cb = pi.callback(input_pinCCW,pigpio.RISING_EDGE,generatorCCW) 83 detect_pinCW = pi.read(input_pinCW) 84 detect_pinCCW = pi.read(input_pinCCW) 85 print("CW",pi.read(input_pinCW)) 86 print("CCW",pi.read(input_pinCCW)) 87 88 if detect_pinCW ==0 and detect_pinCCW ==0: 89 stop() 90 print("STOP") 91 92 93try: 94 while True: 95 main() 96 97except KeyboardInterrupt: 98 print("finish") 99 pi.write(input_pinCW,0) 100 pi.write(input_pinCCW,0) 101 pi.stop()
試したこと
この実行結果から
・17ピン・22ピンは正しくオンオフを感知できている
・ピンをオフにしたあとbreak,returnがprintされているので関数から抜け出している
・一回目に関数から抜け出した以降,ピンがオフ時でも(例として)CWstartがprintされているので勝手に関数が呼び出されている
・もう片方の関数はピンをオンにしても呼び出されていない
がわかりました.

回答2件
あなたの回答
tips
プレビュー