*

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開発(4):イベントハンドラの設定

どもです。 前回のエントリーで、「タッチスクリーンを買った」と書きました。 今回からは、このタッ

記事を読む

eclipse_oxygen

苦肉の策でLinux/EclipseでRaspberryPiのクロス環境を構築してみた

どもです。 前回のエントリでは、仮想環境(VirtaulBox)を用いたRaspberryPi3の

記事を読む

toppers

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

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

記事を読む

toppers

C言語でEV3開発(20)-超音波センサと安全状態

どもです。 前回は、BluetoothでPCとEv3を接続してコマンドの送受信について書きました。

記事を読む

toppers

C言語でEV3開発(22)-ロギング機能

どもです。 前回は、モーターの出力を制御する方法について記載しました。その際に、モータ/車体が期待

記事を読む

toppers

C言語でEV3開発(28)-EV3の移動距離を計算できるようにしてみた

どもです。 今回は、Ev3の移動距離の算出についてです。 1.算出方法について 移動距離は

記事を読む

OpenCvLogo

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

どもです。 今回は、OpenCvを用いて道路の白線検出について、です。 1.今回の環境 O

記事を読む

raspberry-pi

RaspberryPi3を購入しました

どもです。 突然ですが、「Raspberry Pi3 model B」を購入しました。 今回のエ

記事を読む

toppers

C言語でEV3開発(18)-モードの遷移の設計-コマンド通信処理の準備

 どもです。  今回は、前回紹介したEv3とBluetoothで通信する機能を

記事を読む

no image

C言語でEV3開発(17)-コマンドによるTOPPERS/HRP2 EV3RT アプリケーションの制御(コントロール)

どもです。 今回は、TOPPERS/HRP2 EV3RT で作成したアプリをPC上から操作するため

記事を読む

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

GitHub
C/C++のスタブを自動生成するツールを公開しました

(テーマ) C/C++のスタブを自動生成するツールを公開しました

Arduino_Logo
フォトレジスタを使ってみた-Arduinoで光検出

どもです。 今回は、タイトル通り「フォトレジスタの使い方」です。

no image
PC自作2019 – Windows10への移行

どもです。 突然ですが、PCを交換しました。 1. 何があ

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

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

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

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

→もっと見る

PAGE TOP ↑