*

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を使用した内容を書きます。

ではっ!

関連記事

no image

C言語でEV3開発(12)-opOUTPUT_TIME_POWERコマンド

どもです。 今回のエントリーでは、これまた前回に引き続き、モーターを動かすためのコマンドについて書

記事を読む

toppers

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

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

記事を読む

no image

C言語でEV3開発(11)-opOUTPUT_STEP_POWERコマンド

どもです。 今回のエントリーでは、再びモーターを動かすためのコマンドについて書きます。 コマンド

記事を読む

no image

C言語でEV3開発(15)-TOPPERS/HRP2 EV3 で PID制御

どもです。 今回のエントリーは、コレまでのエントリーから内容を変えて、モーターの動作の制御をします

記事を読む

Arduino_Logo

Arduino nano(中華版)をセットアップしてみた

どもです。 突然ですが、「Arduino nano」互換(なのか?)の中華ボードを手に入れました。

記事を読む

python

Ev3開発サポートツール(4)-Pythonによるグラフ表示

どもです。 前回のエントリーで、VisualStudioCommunityでのPythonの開発環

記事を読む

eclipse_cdt_top_100

C言語でEV3開発(3)

どもです。 今回のエントリーの内容は、前回まででセットアップした環境で、実際にEV3上で動く実行フ

記事を読む

toppers

C言語でEV3開発(25)-Q_Learningを実装してみた…が!?

どもです。 今回の内容は、「失敗しました」という内容です。 最近、流行になっている深層学習/

記事を読む

RasPi_Qt

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

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

記事を読む

OpenCvLogo

OpenCvによる画像サイズ変更

どもです。 最近、カメラの動画をOpenCvで加工する、ということに挑戦し始めました。 しか

記事を読む

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="">

Arduino_Logo
Arduino nano(中華版)をセットアップしてみた

どもです。 突然ですが、「Arduino nano」互換(なのか?)

raspberry-pi
libpigpioでのRaspberryPi3とArduinoのSPI通信

どもです。 今回は、libpigpioを使用してRaspberryP

RasPi_Qt
QtでRaspberryPi/GUI開発(10)-SPI通信をしてみた(その3)

どもです。 えー。 「Qtで…」とか書いておきながら、今回もやっぱ

RasPi_Qt
QtでRaspberryPi/GUI開発(10)-SPI通信をしてみた(その2)

どもです。 えー。 「Qtで…」とか書いておきながら、今回もやっぱ

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

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

→もっと見る

PAGE TOP ↑