*

QtでRaspberryPi/GUI開発(8):pigpioを使用したチャタリング対策の問題の対策

公開日: : 最終更新日:2019/01/23 C言語, pigpio, RaspberryPi, 開発

どもです。
だいぶ、間が空いてしまいました。
久しぶりの更新です。

前回のエントリーで、「pigpioを使用したチャタリング対策」で発生した問題について記載しました。
今回のエントリーでは、この「問題」への対処の方法を書きます。

(発生環境)
H/W:RaspberryPi3
OS:Raspbian 9.4(stretch)
LIB:libpigpio(Raspbian 9.4(stretch)でデフォルトインストール済?)

1.発生した問題って?
発生している問題は、「タイマーの停止/再開」を何度も行っていると、「メモリリークが発生する」というものです。
どのような過程でメモリリークが発生するかについては、前回のエントリに記載しています。
この問題により、ボタンのON/OFFの操作ができなくなってしまいます。

2.で、どうする?
今回のエントリで提案する解決方法は、簡単に言ってしまえば「タイマーを止めない」です。
即ち、チャタリング対策のためのスレッドを新規に作成、その中で時間を測定し、指定したチャタリングタイム対策時間が経過したら、本来実行したい割込み処理を実行するようにします。

3.少し具体的に
実装上は、チャタリング用のデータの配列を用意します。
(実際にはmapでもlistでもvectorでも何でもよいです。慣れている、扱い易い方法で問題ないです。)
割込み発生時には、

  • 割込みが発生したタイミング
  • チャタリング対策として待つ時間
  • 時間が満了した際に実行したい処理

を登録します。
で、pigpioライブラリの「gpioSetTimerFunc()」で登録するコールバック関数内で、この配列の要素の「チャタリング対策の待ち時間」として指定された時間が経過していたら、「実行したい処理」を実行します。

このような手順を踏むことで、タイマーを止めることなく、チャタリング対策処理が実現できます。

4.実装と解決の確認
え~…実装ですが、すみません。
今回はありません。

この解決方法を考えている間、いくつかサンプルを作ったのですが、それらと一緒に消してしまいました。
Gitにも登録していませんでした。
迂闊!
不覚!!

時間ができたら、作り直します。

ただ、実験を行った結果としては、問題の解決はできていました。
なので、「解決方法」としては間違っていないようです。

さて。
タイトルに反してQtが関係しないエントリを、期せずして連続して投稿してしまいました。
次回こそ、タイトルに合った、QtとRaspberryPiを使用した内容を書きます。

ではっ!

関連記事

RasPi_Qt

QtでRaspberryPi/GUI開発(5):pigpioを使ってみた

どもです。 RaspberryPiを購入して、LEDも手に入れたのでコレをチカらせてみようと思いま

記事を読む

raspberry-pi

QtでRaspberryPi/GUI開発(9)-SPI通信をしてみた

どもです。 えー。 「Qtで…」とか書いておきながら、今回はQtは出てきません。 今回のエ

記事を読む

MindStormControl_SprachScreen

EV3開発サポートツール(1)-C#のユーザーコントロール開発

どもです。 突然ですが、今回はC#に関するエントリになります。 具体的には、C#/WPFで、独自

記事を読む

eclipse_oxygen

Linux/EclipseでRaspberryPiのクロス環境を構築してみた…がっ!

どもです。 前回のエントリでは、WindowsにRaspberryPi3のクロスコンパイル環境の構

記事を読む

raspberry-pi

RaspberryPiで物体検出(2)-白線検出への挑戦(2):輪郭検出による白線検出(実機編)

どもです。 今回は、前回に引き続きOpenCvを用いて道路の白線検出について、です。 1.今

記事を読む

raspberry-pi

RaspberryPi3対応のタッチスクリーンを買いました

どもです。 ついに、念願のRaspberryPi3対応のタッチスクリーンを買いました。 今回のエ

記事を読む

Splash

EV3開発サポートツール(3)-Ev3Controller

どもです。 今回は、以前ちらりと紹介した、Ev3のモーターの出力を調整するアプリケーションについて

記事を読む

Qt_logo_2016

QtでRaspberryPi/GUI開発(2):ためしに時計を作ってみた(其の弐)

どもです。 前回のエントリーでは、ラジオボタンのグループ化と、選択されたボタンの特定方法まで記載し

記事を読む

google_test_top

C言語でEV3開発(5)

どもです。 今回のエントリーは、前回のエントリーでちくっと触れた、「単体テスト」について、です。

記事を読む

toppers

C言語でEV3開発(26)-EV3で機械学習(1)-QLearningをC#に委譲してみた

どもです。 前回の投稿では、Q-LearningをEV3本体に実装してみたら、メモリが足りなくて動

記事を読む

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

RasPi_Qt
QtでRaspberryPi/GUI開発(12)-gpioの状態をGUIに反映する

どもです。 今回は、gpioピンの状態(HIGH/LOW)の変化を画

raspberry-pi
RaspberryPi起動時にpigpiodがスタートしないようにする

どもです。 これまでpigpioを使用してRaspberryPiから

no image
自宅で電子工作(1):ブレッドボードでの配線を省略する

どもです。 突然ですが、電子工作を始めてみました。 1.背

Arduino_Logo
ホールセンサーの種類と使い方(割込み編)

どもです。 前回に引き続き、今回もホールセンサーについてです。

Arduino_Logo
ホールセンサーの種類と使い方

どもです。 今回のエントリは、表題にある「ホールセンサー」についてで

→もっと見る

PAGE TOP ↑