2016-08-26 6 views
0

Я использую ArduinoJSON, чтобы написать пару точек данных моей EEPROM на Arduino Uno. Я столкнулся с проблемой с getGroundedPR, где мне нужно преобразовать uint8_t в символ, чтобы передать полученные данные в мой парсер JSON.Arduino чтение json из EEPROM/конвертирование uint8_t в char

Это мой первый опыт использования EEPROM, поэтому я готов поспорить, что есть лучший способ сделать это. Должен ли я продолжать использовать JSON или есть лучший способ? Я осторожно отношусь к лимиту записи 10к (дайте или возьмите) на 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; 
} 

ответ

2

Функции 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). Строка должна быть нулевой, поэтому дополнительные байты не должны вызывать проблемы.