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()方法。我尝试在Step()函数中递增变量,但我总是得到"错误编译板Arudino Nano"。我试图直接在Step()方法中调用IncrementCounter(),并且我得到了#34;不能在没有对象的情况下调用类方法"错误。我从Step()方法得到了这个错误。
答案 0 :(得分:1)
尝试在某处(最好在turretCounter
/ .cpp
/ .cxx
文件中)定义.C
,如下所示:
int Stepper::turretCounter = 0;
如果这可以解决您的问题,那么您可能忽略了更具信息性的错误消息,并仅发布了编译器输出的最后一行。将来要更加注意编译错误,并习惯按照它们在输出中出现的顺序来研究它们(因为后来的错误可能只是早期错误的结果)。