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 结尾,这样多余的字节就不会造成问题。
我正在使用 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 结尾,这样多余的字节就不会造成问题。