繁体   English   中英

Arduino:在C ++类中使用Timer

[英]Arduino: Use Timer in c++ class

我正在尝试使用计时器随着时间的推移反复更改PWM输出,以在亮度变化时进行平滑过渡。 尝试编译代码时,我不断收到此错误:

/Users/jt/Documents/Arduino/libraries/SingleColorLight/SingleColorLight.cpp:在构造函数'CSingleColorLight :: CSingleColorLight(int)'中:/Users/jt/Documents/Arduino/libraries/SingleColorLight/SingleColorLight.cpp:13:58:错误:无法将类型'void(CSingleColorLight ::)(void *)'的'CSingleColorLight :: DimmerCallback'转换为类型'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;
}

它要求一个指针,对不对? 任何想法如何解决这个问题? 非常感谢!

如果要让DimmerCallback接受void *参数,则需要命名它,例如

void CSingleColorLight::DimmerCallback(void* x)

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

void CSingleColorLight::DimmerCallback()

int cpp和

void DimmerCallback();

在标题中。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM