質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

解決済

rasberry piでコールバックをしようとすると最初に呼び出された方と違うものが呼び出されない

mochimochi_
mochimochi_

総合スコア7

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

2回答

0リアクション

0クリップ

184閲覧

投稿2022/08/15 01:53

編集2022/08/15 04:12

イメージ説明###前提
ラズパイで17ピンに入力があると12ピンからパルスが,
22ピンに入力があると13ピンからパルスがでるようなプログラムを作成したいです

実現したいこと

①17ピン:オン→12ピン:パルス→17ピン:オフ→12ピン:パルスストップ
②22ピン:オン→13ピン:パルス→22ピン:オフ→13ピン:パルスストップ
17ピンと22ピンは外部からの電圧を受け取り,①,②の状況を作り出せるようにしたいです.
17ピンと22ピンが同時にオンになることはありません,同時にオフになることはあります.

発生している問題・エラーメッセージ

一回目で発生させた方のパルスしか発生しなくなります.

ex)
一回目で12ピンの方で出力させるとそれ以降13ピンからは出力されません.
12ピンの出力は17ピンのオンオフによってパルス出力→ストップは可能です.

該当のソースコード

Python

import pigpio import time pwm_pinCW = 12 #赤 pwm_pinCCW = 13 #オレンジ input_pinCW = 17 #黄色 input_pinCCW = 6#紫 freq1 = 1000 freq2 = 1000 duty =50 cnv_dutycycle = int((duty*1000000/100)) pi = pigpio.pi() pi.set_mode(pwm_pinCW,pigpio.OUTPUT) pi.set_mode(pwm_pinCW,pigpio.OUTPUT) pi.set_pull_up_down(input_pinCW,pigpio.PUD_DOWN) pi.set_pull_up_down(input_pinCCW,pigpio.PUD_DOWN) def pulse_generatorCW(pwm_pinCW): global freq1 print("CWstart") while True: detect_pin = pi.read(input_pinCW) if detect_pin==0: freq1 = 1000 print("break") break else: if freq1<10000: freq1 += 100 pi.hardware_PWM(pwm_pinCW,freq1,cnv_dutycycle) time.sleep(0.01) print(freq1) else: freq=10000 print("return") return def generatorCW(input_pinCW,level,tick): pulse_generatorCW(pwm_pinCW) def pulse_generatorCCW(pwm_pinCCW): print("CCW") global freq2 while True: detect_pin = pi.read(input_pinCCW) if detect_pin==0: freq2 = 1000 print("break") return else: if freq2<10000: freq2 += 20 pi.hardware_PWM(pwm_pinCCW,freq2,cnv_dutycycle) time.sleep(0.000000001) print(freq2) else: freq2=10000 print("retrun") return def generatorCCW(input_pinCCW,level,tick): pulse_generatorCCW(pwm_pinCCW) def stop(): global freq1 global freq2 pi.write(pwm_pinCW,0) pi.write(pwm_pinCCW,0) def main(): cl = pi.callback(input_pinCW,pigpio.RISING_EDGE,generatorCW) cb = pi.callback(input_pinCCW,pigpio.RISING_EDGE,generatorCCW) detect_pinCW = pi.read(input_pinCW) detect_pinCCW = pi.read(input_pinCCW) print("CW",pi.read(input_pinCW)) print("CCW",pi.read(input_pinCCW)) if detect_pinCW ==0 and detect_pinCCW ==0: stop() print("STOP") try: while True: main() except KeyboardInterrupt: print("finish") pi.write(input_pinCW,0) pi.write(input_pinCCW,0) pi.stop()

試したこと

この実行結果から
・17ピン・22ピンは正しくオンオフを感知できている
・ピンをオフにしたあとbreak,returnがprintされているので関数から抜け出している
・一回目に関数から抜け出した以降,ピンがオフ時でも(例として)CWstartがprintされているので勝手に関数が呼び出されている
・もう片方の関数はピンをオンにしても呼び出されていない
がわかりました.

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

y_waiwai

2022/08/15 02:54

回路図を提示しよう

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。