中断创建arduino库
interrupts on creating arduino library
我正在为能量计数器创建一个库。我想计算能量计数器产生的脉冲,并通过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
:
static void increment_per_pulse();
在EnergyCounter类内部,将countPulse定义为静态方法,如下所示:
class EnergyCounter{
//...
static void countPulse();
//...
};
原因:ISR应该是一个返回void且没有参数的函数。类成员函数有一个(隐藏的)参数,该参数是对类实例的引用。
另一种解决方案是将countPulse移到EnergyCounter之外,并使其成为全局命名空间中的一个常规方法(不属于任何类)。
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 在执行其他功能的同时播放动画(LED矩阵和Arduino/ESP8266)
- 使用std::multimap迭代器创建std::list
- 在全局变量中保存类的实例以重新创建类(创建"backup")
- 使用CMake创建QML插件
- 如何在c++中为模板函数实例创建快捷方式
- 使用暂停按钮ARDUINO创建灯光序列时出现问题
- 如何在不知道Arduino中知道其大小的情况下创建数组和存储值
- 如何在Arduino中创建另一个类库的实例变量
- C++类创建"does not name a type"(使用 Arduino 和颜色传感器)
- Arduino Serial在哪里创建
- 如何在Arduino上为SD卡创建动态文件名
- 为Arduino创建库
- 如何在Arduino中从SD卡创建变量
- 如何在C++中创建一个返回字节数组的函数?Arduino项目
- 中断创建arduino库
- Arduino Uno代码创建不正确的时间值
- 需要帮助创建Arduino (c/c++)的无限数组
- 在Arduino草图文件夹中创建库
- C++:在Xcode中创建等效的Arduino 'byte'的方法