1、简单理解回调函数就是在B类中定义了A类,A类的方法中调用B类的方法。
2、这个简单的例子是一个带一个字符串参数的回调函数, 当CallBackDemo的Loop函数中串口接收到字符串01后,调用Main.cpp中的函数返回Button 1 pressed。
3、项目结构如下图。
4、CallBackDemo.h代码如下。
#include "arduino.h"
class CallBackDemo {
typedef void (*callback)(String);
private:
callback myCallBack;
public:
CallBackDemo();
~CallBackDemo();
void setCallBack(callback myCallBack);
void Loop();
};
5、CallBackDemo.cpp代码如下。
#include "CallBackDemo.h"
CallBackDemo::CallBackDemo()
{
Serial.begin(115200);
}
CallBackDemo::~CallBackDemo()
{
}
void CallBackDemo::setCallBack(callback myCallBack)
{
this->myCallBack = myCallBack;
}
void CallBackDemo::Loop()
{
while (Serial.available() > 0)
{
String input = Serial.readString();
Serial.println(input);
if (input=="01")
{
if (myCallBack != NULL)
{
this->myCallBack("Button 1 pressed");
}
}
}
}
6、main.cpp代码如下。
#include <Arduino.h>
#include "CallBackDemo.h"
CallBackDemo callBackDemo;
void print(String data) {
Serial.println(data);
}
void setup() {
// put your setup code here, to run once:
callBackDemo.setCallBack(print);
}
void loop() {
// put your main code here, to run repeatedly:
callBackDemo.Loop();
}