我使用此计时器库:https://github.com/JChristensen/Timer/tree/v2.1
代码示例:
int afterEvent = t.after(10000, doAfter, (void*)0);
void doAfter(void *context)
{
Serial.println("stop the led event");
t.stop(MyledEvent);
}
文档:
上下文是一个void指针,因此可以转换为任何其他数据 类型。它的使用是可选的,如果你不需要它,只需代码(void *)0 as 在上面的例子中,但要确保回调函数 定义在他们的参数列表中有它
int8_t after(unsigned long duration,void( callback)(void ),void * 上下文);
我需要在“afterEvent”中加入一个参数(在“doAfter”中使用未来),我不明白该怎么做。你能解释我如何在这个“doAfter”上做一个参数列表以及如何把论点放在“t.after”上?
我的测试:
int afterEvent = t.after(10000, doAfter(5), (void*)0);
void doAfter(int x, void *context) { ..code... }
错误:
错误:声明'int type'会影响参数
错误:函数'void doAfter(int,void *)'的参数错误:太少
由于
答案 0 :(得分:1)
如果你的函数需要任何参数,那么它们需要通过上下文指针传递,这就是它的用途。所以一个简单的例子如下:
void doAfter(void *my_param) {
int x = *(int *)my_param;
..... your code here ...
}
然后打电话给你,你只会做
const int input_param = 5;
int afterEvent = t.after(10000, doAfter, (void *)&input_param);
如果您需要传递多个参数,那么可以使用结构:
struct param_list {
int param1;
double param2;
};
void doAfter2(void *context)
{
struct param_list *params = context;
.... code here can access params with params-> ..
}
struct param_list p = {1, 2.0};
int afterEvent = t.after(10000, doAfter2, (void *)&p);