Проблема с ограничением размера 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? Если да, то как я могу расширить емкость, следует ли использовать чип памяти или какой код мне следует использовать для решения этой проблемы?
@Alex Zhuravel, 👍3
1 ответ
Лучший ответ:
Проблема связана с sizeof(com)
в ваших циклах. sizeof()
предназначен для массивов C, а не строковых объектов. Если вы его распечатаете, он сообщит 6, что не является длиной массива. Для строковых объектов вместо этого следует использовать com.length()
. Тогда результат будет
Сохранено
Тестирование~Сеть123......
PS EEPROM может хранить 1024 байта на платах на базе ATmega328P (я полагаю, что это то, что использует большинство Arduino Nanos (включая клоны).
- Чтение и запись в EEPROM
- Программирование AT24C16 EEPROM с помощью Arduino Nano
- Компиляция скрипта сборки во внешнем EEPROM коде Arduino
- avrdude ser_open() can't set com-state
- Загрузка Arduino Nano дает ошибку: avrdude: stk500_recv(): programmer is not responding
- Является ли использование malloc() и free() действительно плохой идеей для Arduino?
- Как читать и записывать EEPROM в ESP8266
- Какое максимальное энергопотребление Arduino Nano 3.0?