Arduino:在 C++ 类中使用定时器
Posted
技术标签:
【中文标题】Arduino:在 C++ 类中使用定时器【英文标题】:Arduino: Use Timer in c++ class 【发布时间】:2017-11-17 15:50:26 【问题描述】:我正在尝试使用计时器随着时间的推移反复更改 PWM 输出,以便在亮度变化时平滑过渡。尝试编译代码时,我不断收到此错误:
/Users/jt/Documents/Arduino/libraries/SingleColorLight/SingleColorLight.cpp:在构造函数'CSingleColorLight::CSingleColorLight(int)'中: /Users/jt/Documents/Arduino/libraries/SingleColorLight/SingleColorLight.cpp:13:58: 错误:无法将 'CSingleColorLight::DimmerCallback' 从类型 'void (CSingleColorLight::)(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】:如果你想让 DimmerCallback 接受一个 void* 参数,那么你需要给它命名,比如
void CSingleColorLight::DimmerCallback(void* x)
但您没有在代码中使用 void*。看起来你应该摆脱它,所以它会是
void CSingleColorLight::DimmerCallback()
输入 cpp 和
void DimmerCallback();
在标题中。
void* 参数是一个可以指向任何数据类型的指针,它与没有参数的 void 不同。
【讨论】:
这确实使情况恶化...至少我猜是这样,因为错误注释更长:无法将 'CSingleColorLight::DimmerCallback' 从类型 'void (CSingleColorLight::)()' 转换为类型 ' void ()(void)' ets_timer_setfn(&Dimmer, this->DimmerCallback, NULL);以上是关于Arduino:在 C++ 类中使用定时器的主要内容,如果未能解决你的问题,请参考以下文章