0

ノンブロッキング LED 点滅をプログラムしようとしています。

そのため、私は小さなクラスをプログラムしました:

03: class timer {
04: private:  
05:   int startMillis;
06:   int delayMillis;  
07: public:  
08:  timer ( int pDelay ) {
09:    reset ( pDelay );
10:  }  
11:  void start () {
12:    startMillis = millis();
13:   }  
14:   void reset ( int pDelay ) {
15:     delayMillis = pDelay;    
16:   }  
17:   boolean checkTimer () {
18:     if ( (millis() - startMillis) >= delayMillis ) {
19:       return true;
20:     } else {
21:       return false;
22:     }
23:   }
24: };

それから私は loop() でこのようなことをしたい:

42: void switchLed (int *pPin, timer *pTimer) {
43:   if ( (*pTimer->checkTimer()) == true ) {
44:     if ( bitRead(PORTD, *pPin) == HIGH ) {
45:       digitalWrite(*pPin, LOW);
46:     } else {      
47:       digitalWrite(*pPin, HIGH);
48:     }
49:     *pTimer->start();
50:   }
51: }

loop() でパラメータ "(&led[0], &ledTimer01)" を指定して switchLed() 関数を呼び出します。私はそれがうまくいくはずだと思うが、私のコンパイラは言う

nonblockingblink:5: error: 'timer' has not been declared
nonblockingblink.ino: In function 'void switchLed(int*, timer*)':
nonblockingblink:43: error: invalid type argument of 'unary *'
nonblockingblink:49: error: void value not ignored as it ought to be

問題はどこだ?手伝ってくれてありがとう :)。

4

2 に答える 2

1

pTimer->checkTimer()タイプがありますboolean

したがって、この:

*pTimer->checkTimer()

booleanポインタ型ではないため、無効です。

他の関数についても同じですが、なぜ*演算子を使用しているのですか?これは正しくありません:

*pTimer->start();

正解です:

pTimer->start();

また

(*pTimer).start();  // equivalent to above, prefer the above form
于 2013-02-21T20:57:17.883 に答える
1

2 種類のポインター逆参照を使用します。最初に を使用して構造体メンバー->にアクセスし、次に非ポインター型 ( によって返される) で再度使用します。アスタリスクを削除すると、機能するはずです。pTimer*booleancheckTimer

于 2013-02-21T20:58:07.453 に答える