1

重複の可能性:
メンバー関数ポインターをどのように渡しますか?

そのため、私が取り組んできたかなり大きなスケッチを縮小するために、Arduino 用のライブラリをいくつか作成しています。私のクラスのコンストラクターを除いて、これまでのところすべてが機能しています。これを使用して、変数、ピンモード、および割り込みを初期化します。割り込みをアタッチしようとすると問題が発生します。クラスで宣言および定義された関数があり、setup() ブロックの Arduino スケッチにアタッチするか、コンストラクターのライブラリでアタッチするかは、次のエラーが表示されます。

タイプ 'void (RotaryEncoders::)()' の引数が 'void (*)()' と一致しません

コードの基本構造は次のとおりです。

RotaryEncoders::RotaryEncoders() {
     //Initialise some variables
     //Set up some pin modes
     attachInterrupt(2, doRedEncoder, CHANGE);
}

void RotaryEncoders::doRedEncoder() {
     //Some code, blah blah blah
}

純粋に Arduino IDE 内でこれを行うと、ツールがメモリ内の関数に対して何かを実行して、正しく動作させると思います。解決策は簡単だと思いますが、わかりません:Sありがとう:D

4

1 に答える 1

1

これらの関数は通常オブジェクトによって使用されるため、メンバー関数への関数ポインターは悪い考えです。

それを解決する2つの方法:

解決策1:外部関数(非メンバー関数)(通常のCスタイル関数)を用意して、あなたのために何かをしてください。

解決策2:これを見てください

幸運を。

于 2012-10-19T14:04:04.230 に答える