Arduino:在c ++类

时间:2017-11-17 15:50:26

标签: c++ class timer arduino esp8266

我正在尝试使用定时器重复更改PWM输出,以便在亮度变化时实现平滑过渡。我在尝试编译代码时不断收到此错误:

  

/Users/jt/Documents/Arduino/libraries/SingleColorLight/SingleColorLight.cpp:在构造函数' CSingleColorLight :: CSingleColorLight(int)':   /Users/jt/Documents/Arduino/libraries/SingleColorLight/SingleColorLight.cpp:13:58:错误:无法转换' CSingleColorLight :: DimmerCallback'来自type' void(CSingleColorLight ::)(void *)'输入' void()(void )'          ets_timer_setfn(& Dimmer,this-> DimmerCallback,NULL);

这是我的代码:

class CSingleColorLight {

  private:
    int pin;
    int intensitySetPoint;
    int intensityActual;
    int percentageBuffer;
    ETSTimer Dimmer;
    int dimmerCount;

  public:
    CSingleColorLight(int _pin);
    bool setIntensity(int _intensity);
    int getIntensity(); 
    bool getStatus(void);
    bool setStatus(bool _status); 
    void DimmerCallback(void*);

};

并在cpp文件中:

void CSingleColorLight::DimmerCallback(void*) {
  if(dimmerCount>0){
    dimmerCount--;  
    intensityActual++;
  } else if(dimmerCount<0){
    dimmerCount++;
    intensityActual--;
  } else {
    ets_timer_disarm(&Dimmer);
  } 
  analogWrite(pin, percentageToTime[intensityActual]);
  return;
}

它要求指针,对吗?知道如何解决这个问题吗? 非常感谢!

1 个答案:

答案 0 :(得分:0)

如果你想让DimmerCallback获取一个void *参数,那么你需要命名它,比如

void CSingleColorLight::DimmerCallback(void* x)

但您没有在代码中使用void *。看起来你应该摆脱它,所以它将是

void CSingleColorLight::DimmerCallback()

int cpp和

void DimmerCallback();
标题中的

void *参数是一个可以指向任何数据类型的指针,它与void不同,只是没有参数。