2016-06-24 14 views
0
class Stepper 
{ 
    private: 
    int enable; 
    int direction; 
    int speed; 
    static int turretCounter; 
    public: 
    Stepper(int en, int dir) 
    { 
     enable = en; 
     direction = dir; 
     pinMode(enable,OUTPUT); 
     pinMode(direction,OUTPUT); 
     pinMode(4,OUTPUT);  
    } 
    void Stop() 
    { 
     digitalWrite(enable,1); 
     Timer1.detachInterrupt(); 
     Timer1.stop(); 
    } 
    static void IncrementCounter() 
    { 
     turretCounter++; 
    } 
    //your step pin must be 4 due to limitations on static vars and methods 
    static void Step() 
    { 
     digitalWrite(4,0); 
     delayMicroseconds(1); 
     digitalWrite(4,1); 
     IncrementCounter(); 
    } 
    void SetSpeed(int Speed) 
    { 
     speed = Speed; 
    } 
    void Run(int seconds) 
    { 
     digitalWrite(enable,0); 
     Timer1.attachInterrupt(Step); 
     Timer1.initialize(speed); 
    } 
    int GetCounter() 
    { 
     return turretCounter; 
    } 
    void SetDirection(int dir) 
    { 
     digitalWrite(direction,dir); 
    } 
    int GetSpeed() 
    { 
     return speed; 
    } 
}; 

静的なStep()メソッドと静的なIncrementCounter()メソッドに注意したいと思います。私はステップ()関数内の変数をインクリメントしようとしましたが、私はいつも "ボードArudino Nanoのエラーコンパイル"を取得します。私はStep()メソッド内で直接IncrementCounter()を呼び出そうとしましたが、「オブジェクトなしでクラスメソッドを呼び出せません」というエラーが発生します。私はこのエラーをStep()メソッドから取得します。これはあなたの問題を解決した場合は、おそらくあなたは、より有益なエラーメッセージを見落としのみ最後を掲載している静的クラス関数内で静的変数をインクリメントできません

int Stepper::turretCounter = 0; 

+3

*オブジェクトなしでクラスメソッドを呼び出すことはできません。*エラーの原因となるコードのどこにポイントする必要があります。そのコードは何ですか? – NathanOliver

+0

そのエラーはStep()メソッドから発生します。 @NathanOliver –

答えて

1

は次のようにturretCounterどこか(好ましくは.cpp/.cxx/.C内のファイル)を定義してくださいあなたのコンパイラ出力の行。将来は、コンパイルエラーにもっと注意を払い、出力に現れる順にそれらを調べる習慣をつけてください(後のエラーは単に前のエラーの結果かもしれません)。

関連する問題