Проблема с ограничением размера EEPROM

Я создаю тестовую программу с помощью Arduino Nano, в которой могу сохранить сеть и пароль. Вот мой код для начала:

void SaveNetwork(String ssid, String pass){
  String com = ssid + "~" + pass;
  const char *array = com.c_str();
  for(int i = 0; i<sizeof(com); i++){
    EEPROM.write(i, array[i]);
  }
  Serial.println("Saved");
  char ar[255] = "";  //test read string.
  for(int i = 0; i<sizeof(com); i++){
    ar[i] = EEPROM.read(i);
  }
  Serial.println(ar);
}

SaveNetwork("Testing", "Network123......");

Теперь я печатаю строку ar, которая должна возвращать ssid, «~» и пароль.

НО вместо «Тестирование ~Network123......» я получаю «Тестировать».

Существует ли ограничение на размер EEPROM? Если да, то как я могу расширить емкость, следует ли использовать чип памяти или какой код мне следует использовать для решения этой проблемы?

, 👍3


1 ответ


Лучший ответ:

3

Проблема связана с sizeof(com) в ваших циклах. sizeof() предназначен для массивов C, а не строковых объектов. Если вы его распечатаете, он сообщит 6, что не является длиной массива. Для строковых объектов вместо этого следует использовать com.length(). Тогда результат будет

Сохранено

Тестирование~Сеть123......

PS EEPROM может хранить 1024 байта на платах на базе ATmega328P (я полагаю, что это то, что использует большинство Arduino Nanos (включая клоны).

,