我花了很长时间解决这个问题。 我正在打开从ESP32到NodeJS后端的websocket连接。收到消息时,将使用ArduinoJSON解析内容。
我将解析的内容存储在全局变量中,以便可以在我的void loop()中访问它们。每次收到新消息时,它们都会被覆盖。那就应该这样。
变量声明:
uint8_t brightness = 10;
uint8_t lastMillis = 0;
int ArrayPointer = 0;
int interval = 2000;
bool immediate = true;
const size_t capacity = JSON_ARRAY_SIZE(32) + JSON_OBJECT_SIZE(1) + 290;
在void Setup()之后
void onmessageCallback(WebsocketsMessage message) {
Serial.print("Got Message: ");
DynamicJsonBuffer jsonBuffer(capacity);
JsonObject & JSONResponse = jsonBuffer.parseObject(message);
JsonArray & PixelArray = JSONResponse["frame"];
brightness = JSONResponse["brightness"];
ArrayPointer = 0;
immediate = true;
}
void loop() {
client.poll();
if(millis() - lastMillis >= interval || immediate == true) {
// Here I would like to access the Variable PixelArray
lastMillis = millis();
}
}
我当然不能在void循环中访问PixelArray,因为它的作用域不同。 现在,我需要一种使PixelArray可以全局访问的方法。
我尝试过的事情:
- 在void Setup()之前声明了一个全局JsonArray,但这引发了一个错误;(。
- 将其分配给另一个(全局)阵列无法正常工作,因为PixelArray的大小有所不同。
希望有人能帮助我;)
预先感谢;)
PS:当前我正在使用ArduinoJson 5,但是升级不会有问题。