Arduino 从 EEPROM 读取 json / 将 uint8_t 转换为 char

Arduino reading json from EEPROM / converting uint8_t to char

我正在使用 ArduinoJSON 将几个数据点写入我在 Arduino Uno 上的 EEPROM。我 运行 遇到了 getGroundedPR 的问题,我需要将 uint8_t 转换为字符以将检索到的数据传递到我的 JSON 解析器。

这是我第一次使用 EEPROM,所以我敢打赌有更好的方法来做到这一点。我应该继续使用 JSON 还是有更好的方法?我对 EEPROM 上的 10k 写入限制(允许或接受)持谨慎态度。

EEPROM read/write 被注释掉,直到我确定我的过程

void IMUController::setGroundedPR(double p, double r) {
  Serial.print("Setting IMU ground: ");

  StaticJsonBuffer<200> jsonBuffer;
  JsonObject& root = jsonBuffer.createObject();
  root["pitch"] = p;
  root["roll"] = r;

  root.printTo(Serial);

  char buffer[256];
  root.printTo(buffer, sizeof(buffer));
  Serial.println();

//  EEPROM.write(EEPROM_ADDRESS_IMU_GROUNDED, buffer);
}

double* IMUController::getGroundedPR() {
  double ret[2] = {0, 0};
  StaticJsonBuffer<200> jsonBuffer;
  uint8_t json_saved = EEPROM.read(EEPROM_ADDRESS_IMU_GROUNDED);
  char json[] = "asdf"; // convert json_saved to char here

  JsonObject& root = jsonBuffer.parseObject(json);

  if(!root.success()) {
    // return the result
    ret[0] = (double)root["pitch"];
    ret[1] = (double)root["roll"];
    return ret;
  }

  return ret;
}

EEPROM 函数read()write() 只处理单个字符。您需要使用 put()get() 来处理数组。

char buffer[256];
root.printTo(buffer, sizeof(buffer));
EEPROM.put(EEPROM_ADDRESS_IMU_GROUNDED, buffer);

并回读:

char json[256];
EEPROM.get(EEPROM_ADDRESS_IMU_GROUNDED, json);
JsonObject& root = jsonBuffer.parseObject(json);

不过您需要注意数组大小,EEPROM 函数将获取并放入数组中的字节数 (256)。该字符串应该以 null 结尾,这样多余的字节就不会造成问题。