c – 创建arduino库时中断

我正在为能量计数器创建一个库.我想计算能量计数器产生的脉冲并通过arduino将其转换为能量.为了捕获任何脉冲,我想使用arduino中断.我希望它易于使用:

#include <EnergyCounter.h>

#define counterPin 2; // interrupt code 0 in Uno
EnergyCounter counter;

void setup(){
    counter.begin(counterPin);
}
...

现在,在begin方法中,我想将一个中断附加到counterPin:

void EnergyCounter::begin(byte pin){
    pinMode(pin, INPUT);
    attachInterrupt(0, countPulse, RISING);
}

void EnergyCounter::countPulse(){
    display += increment_per_pulse;
}

当我尝试它时,我收到以下错误:

error: cannot convert 'EnergyCounter::countPulse' from type 'void (EnergyCounter::)()' to type 'void (*)()'
 attachInterrupt(0, countPulse, RISING);
                                      ^
Erro ao compilar.

这是否意味着我不能将方法用作中断服务程序(ISR)?
如何解决问题,并且具有易于使用的库界面?

最佳答案 increment_per_pulse需要是一个静态函数(参见签名).

所以,标记为静态:

static void increment_per_pulse();
点赞