我正在使用 esp8266 制作一个简单的自制物联网解决方案,使用内置库用于 Web 服务器路由。这些库函数不喜欢使用带参数的函数,所以我的解决方案是使用 lambdas 并捕获我需要的变量。问题是,当尝试对来自两个不同 lambda 的对象的同一实例进行操作时,当使用 pinPower 设置器方法更新存储引脚功率的 int (1 或 0,是的,我知道 bool 会更好)时一个 lambda 不会出现在另一个中。
我认为这与 lambdas 按值捕获变量并创建我的类的新实例有关;我曾尝试捕获 outputPinArray[i] 作为参考,但这只是意味着 getter 函数未能获得正确的值,因此未能执行切换值(类在内部使用 getter)。使用静态变量和 getter 函数有效,但我希望能够使用该类的多个实例,因此不想要这样的共享变量。我已经看到各种帖子似乎指向使用 extern 关键字进行捕获,但我没有找到太多在 lambdas 中使用它的文档,也无法弄清楚如何正确使用它。
这是我正在使用的代码:
for(int i = 0; i < 1; i++) {
server.on(path, HTTP_POST, [outputPinArray , argToCheck, i]() mutable {
// Sets pinNumber variable and turns on or off the arduino pin using outputPinArray[i].setPinPower or .togglePinPower
});
server.on(path, HTTP_GET, [outputPinArray,i](){
// Send integer value using outputPinArray[i].getPinPower()
});
}
outputPin 类代码:
int OutputPin::getPinPower(){
return pinPower;
}
void OutputPin::setPinPower(int value){
if(value == HIGH || value == LOW){
pinPower = value;
digitalWrite(getPinNum(), pinPower);
}
任何帮助表示赞赏,谢谢!