您不能將方法傳遞給需要函數的函數,除非將其定義爲static。
寫靜:
static void velocity::functionISR_name()
和
attachInterrupt(&velocity::functionISR_name);
不幸的是靜態方法不綁定到特定的實例了。你應該只和單身人士一起使用它。在Arduino的,你應該寫像剪斷的代碼如下所示的類:
class velocity
{
static velocity *pThisSingelton;
public:
velocity()
{
pThisSingelton=this;
}
static void functionISR_name()
{
pThisSingelton->CallWhatEverMethodYouNeeded();
// Do whatever needed.
}
// … Your methods
};
velocity *velocity::pThisSingelton;
velocity YourOneAndOnlyInstanceOfThisClass;
void setup()
{
attachInterrupt(&velocity::functionISR_name);
// …other stuff…
}
這看起來醜陋,但在我看來,這是完全沒關係與Arduino的作爲機會非常這樣的系統上的限制。
再想一想,我會親自去索林在上面的回答中提到的方法。那更像是這樣的:
class velocity
{
public:
velocity()
{
}
static void functionISR_name()
{
// Do whatever needed.
}
// … Your methods
};
velocity YourOneAndOnlyInstanceOfThisClass;
void functionISR_name_delegation()
{
YourOneAndOnlyInstanceOfThisClass.functionISR_name();
}
void setup()
{
attachInterrupt(functionISR_name_delegation);
// …other stuff…
}
它也可以爲你節省一些字節,你需要在第一個例子中。
作爲網站備註:未來,請發佈確切代碼(例如attachInterrupt需要更多參數)並複製&粘貼錯誤消息。通常錯誤在你不懷疑的地方是確切的。這個問題是個例外。通常我和其他人會要求更好的規格。
「我得到錯誤」。什麼是錯誤? – BoBTFish