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;
:
*オブジェクトなしでクラスメソッドを呼び出すことはできません。*エラーの原因となるコードのどこにポイントする必要があります。そのコードは何ですか? – NathanOliver
そのエラーはStep()メソッドから発生します。 @NathanOliver –