将 Arduino 草图重构为 C++ class
Refactoring an Arduino sketch into a C++ class
我正在尝试将 this Arduino sketch 转换为 C++ class。头文件 "WifiManager.h"
定义为
class WifiManager
{
public:
// TODO: Use a singleton pattern
WifiManager();
void run();
bool isConnected();
char *getIpAddress();
virtual ~WifiManager();
private:
};
并在WifiManager.cpp
中实现,其完整代码实现为accessible here。简而言之,.cpp
文件实现了 .h
的 API,但也处理 WIFI 回调函数。至于测试,我假设如果我 运行 程序如下,回调函数将被自动调用:
#include <Arduino.h>
#include "WifiManager.h"
WifiManager *wifi;
void setup()
{
Serial.begin(115200);
wifi = new WifiManager();
}
void loop()
{
delay(1000);
}
但是,这不起作用。似乎所有WIFI相关的回调根本就没有运行。但是,作为 C++ 初学者,我不知道如何解决这个问题。因此,我想知道解决此问题的最佳方法是什么。
我想你需要打电话给 WiFi.begin
。您在 onWhenWifiOnDisconnects()
中调用了它,但即使触发了断开连接事件,您也仅在调用 WiFi.disconnect(true)
.
之后才在构造函数中注册了事件处理程序
所以为了解决这个问题,您的代码现在做了什么:
在你调用的构造函数中WiFi.disconnect(true)
断开连接事件已触发,但没有人处理它
您注册了您的事件处理程序,然后什么也没有发生
您应该在构造函数或您显式调用的单独成员函数中调用 WiFi.begin
而不是(仅)在 onWhenWifiOnDisconnects()
.
中
我正在尝试将 this Arduino sketch 转换为 C++ class。头文件 "WifiManager.h"
定义为
class WifiManager
{
public:
// TODO: Use a singleton pattern
WifiManager();
void run();
bool isConnected();
char *getIpAddress();
virtual ~WifiManager();
private:
};
并在WifiManager.cpp
中实现,其完整代码实现为accessible here。简而言之,.cpp
文件实现了 .h
的 API,但也处理 WIFI 回调函数。至于测试,我假设如果我 运行 程序如下,回调函数将被自动调用:
#include <Arduino.h>
#include "WifiManager.h"
WifiManager *wifi;
void setup()
{
Serial.begin(115200);
wifi = new WifiManager();
}
void loop()
{
delay(1000);
}
但是,这不起作用。似乎所有WIFI相关的回调根本就没有运行。但是,作为 C++ 初学者,我不知道如何解决这个问题。因此,我想知道解决此问题的最佳方法是什么。
我想你需要打电话给 WiFi.begin
。您在 onWhenWifiOnDisconnects()
中调用了它,但即使触发了断开连接事件,您也仅在调用 WiFi.disconnect(true)
.
所以为了解决这个问题,您的代码现在做了什么:
在你调用的构造函数中
WiFi.disconnect(true)
断开连接事件已触发,但没有人处理它
您注册了您的事件处理程序,然后什么也没有发生
您应该在构造函数或您显式调用的单独成员函数中调用 WiFi.begin
而不是(仅)在 onWhenWifiOnDisconnects()
.