首页 > 解决方案 > 将 Char 写入 Arduino EEPROM

问题描述

我在将数据传递到 EEPROM 时遇到问题。它似乎不接受 char 变量。我正在做这里所说的:https ://www.arduino.cc/en/Reference/EEPROMPut

所以我的这是我的对象结构

struct DeviceDataObject {
  bool flag;
  char data[20];
  char data2[20];
  int rate1;
  int rate2;
  int rate3;
};

所以当我测试时:

int RATES[3] = {300, 1500, 3600};
DeviceDataObject new_data = {true, "Data1Sample", "Sample2", RATES[0], RATES[1], RATES[2]};
WRITE_Device(new_data);

这是我的写作功能

void WRITE_Device(DeviceDataObject data) {
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }
  int eeAddress = 0;
  float f = 123.456f;  //Variable to store in EEPROM.
  EEPROM.put(eeAddress, f);
  eeAddress += sizeof(float); //Move address to the next byte after float 'f'.
  EEPROM.put(eeAddress, data);
  //Serial.println("Memory Data Updated");
}

一切似乎都很好。但是,如果我用变量替换"Data1Sample""Sample2",EEPROM 的数据似乎被错误地更改了。

void ChangeValue(String value) {
        int RATES[3] = {300, 1500, 3600};
        char charBuf[20];
        value.toCharArray(charBuf, 20); //Convert to char

        DeviceDataObject new_data = {true, "", {charBuf}, RATES[0], RATES[1], RATES[2]}
        WRITE_Device(new_data); 
}

可能是什么错误?

标签: c++stringarduinochareeprom

解决方案


看起来像指针问题,试试这个

void ChangeValue(String value) {
        int RATES[3] = {300, 1500, 3600};
        DeviceDataObject new_data = {true, "", "", RATES[0], RATES[1], RATES[2]}
        value.toCharArray(new_data.data2, 20); //Convert to char

        WRITE_Device(new_data); 
}

(您正在创建一个字符串,其中第一个字符是指向堆栈变量 charBuf 的指针,而不是复制字符串)


推荐阅读