-1 embedded arduino nodemcu arduino-c++
我正在使用nodemcu ESP8266并编写一个程序将一些值存储到EEPROM(分配缓冲区地址115到150来存储用户名)。
当我使用 for 循环从 115 到 150 读取 EEPROM 数据时,它将返回未知字符和字符串。当我检查空值以确定字符串何时结束时,代码不起作用。
我的代码:
//My Code for store username
String consumername = obj [String("USERNAME")] ;
Serial.println("writing eeprom > Consumer Name:");
for (int i = 0; i < consumername.length(); ++i)
{
EEPROM.write(115 + i, consumername[i]);
Serial.print("Wrote: ");
Serial.println(consumername[i]);
}
Run Code Online (Sandbox Code Playgroud)
//My Code for reading username
for (int i = 115; i < 150; ++i)
{
ch = char(EEPROM.read(i));
if(ch!='\0'){
oname+= char(EEPROM.read(i));
}
}
Serial .print("Name=");
Serial .println(oname);
Run Code Online (Sandbox Code Playgroud)
在我看来,您在写入 EEPROM 时没有包含字符串终止符。将 更改i < consumername.length()为i <= consumername.length()包含字符串终止符。
for (int i = 0; i <= consumername.length(); ++i)
{
EEPROM.write(115 + i, consumername[i]);
Serial.print("Wrote: ");
Serial.println(consumername[i]);
}
Run Code Online (Sandbox Code Playgroud)
正如下面的评论所指出的,您的读取循环需要修改。下面我假设oname您要向其中添加字符的空字符串。因此,您需要从 EEPROM 中读取字符,直到读取到字符串末尾为止,此时您已完成读取。
for (int i = 115; i < 150; ++i)
{
ch = char(EEPROM.read(i));
if(ch == '\0') break; // if end of string found, break out of read loop.
oname += ch;
}
Run Code Online (Sandbox Code Playgroud)