【问题标题】:Arduino reading json from EEPROM / converting uint8_t to charArduino 从 EEPROM 读取 json / 将 uint8_t 转换为 char
【发布时间】:2016-08-27 15:46:39
【问题描述】:

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

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

EEPROM 读/写被注释掉,直到我确定我的过程

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;
}

【问题讨论】:

    标签: arduino arduino-uno eeprom


    【解决方案1】:

    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 结尾,因此额外的字节不会导致问题。

    【讨论】:

      猜你喜欢
      • 2023-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-23
      • 2019-10-14
      • 1970-01-01
      • 2017-08-15
      • 2021-07-11
      相关资源
      最近更新 更多