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

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

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

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

Raspberry Pi

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

解決済

タクトスイッチ操作時のチャタリングが原因と考えられる誤操作を防止したい

Sigma1630
Sigma1630

総合スコア32

Python 3.x

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

Raspberry Pi

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

3回答

0評価

1クリップ

8433閲覧

投稿2018/07/26 13:05

【生じている問題・どうしたいか】
タクトスイッチを押した場合LEDがつき、もう一度押した場合LEDが消える回路を作りました。
LEDが消えているときにスイッチを押した場合は、問題なくLEDがつきます。
しかし、LEDがついているときにスイッチを押した場合、①完全に消える場合、と
②1回消えた後もう一度つく場合、があります。常に①の場合を達成できるコードを書きたいです。

【回路】
イメージ説明

【コード】

Python

import RPi.GPIO as GPIO from time import sleep def my_callback(x): global ledstate if x==24: ledstate=not ledstate if led state==1: GPIO.output(25.GPIO.HIGH) else: sleep(0.5) #後述 GPIO.output(25,GPIO.LOW) GPIO.setmode(GPIO.BCM) GPIO.setup(25,GPIO.OUT,initial=GPIO.LOW) GPIO.setup(24,GPIO.IN,pull_up_down=GPIO.PUD_DOWN) GPIO.add_event_detect(24,GPIO.RISING,callback=my_callback,bouncetime=200) #タクトスイッチを押すとmy_callbackを呼び出す ledstate=0 while True: sleep(0.01)

この回路とコードにより、LEDが消えているときにスイッチを押すとLEDがつき、
LEDがついているときにスイッチを押すと、0.5secスリープした後、LEDが消えます。
しかし上述のように、ついているときに押した場合は、消える場合と、消えた後もう一度つく場合の2通りがでてしまいます。

【試したこと】
my_callback中の
sleep(0.5)
の行を削除すると、問題なく作動します(LEDがついている場合に押しても100%完全に消える)。
おそらくですが、callbackで呼ばれる関数がある程度の時間を伴う場合、今回のようなバグ(おそらくチャタリング)が
生じるのだと思います。

しかし、この行は残したまま解決できるようにしたいのです。なぜなら今後、イベント時に呼び出す関数が
この関数のようにある程度の長さの時間を伴った出力になる場合が想定されるためです。

原理として今回なぜこのようなバグが生じたか、どのようにしたらコードの意図を損なわずに解決できるのか、
ご教示いただけますと助かります。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

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

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

Sigma1630

2018/07/26 15:23

気づきですが、スイッチを押しっぱなしにするとこのようなトラブルは発生しませんでした。しかし、スイッチを離したときになぜかcallbackが呼ばれて点灯してしまいます。

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

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

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

Python 3.x

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

Raspberry Pi

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