gpt4 book ai didi

c - 使 ArduinoJSON 数组全局可用

转载 作者:行者123 更新时间:2023-11-30 14:35:01 24 4
gpt4 key购买 nike

我已经思考这个问题很长时间了。我正在打开从 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;

无效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,但升级没有问题。

最佳答案

不要那样做。

您应该仅使用 ArduinoJson 来序列化和反序列化 JSON 对象,而不是存储程序状态。 Its documentation makes that very clear.

执行此操作的正确方法(ArduinoJSON 包设计的使用方式)是维护内部数据结构并将 JSON 对象序列化和反序列化到其中。

因此,您将拥有一个全局变量,它将作为 PixelArray 的内部表示形式,然后在收到 JSON 消息时将 JsonArray 中的值复制到其中。您在这里正确使用了亮度;您应该对 PixelArray 执行相同的操作。

关于c - 使 ArduinoJSON 数组全局可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58717829/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com