我试图将项目写入EEPROM,然后将其读出。我发现阅读回来的时候,我有点不像我所说的那样。我缩小到一个可以告诉你的例子。下面我读入变量2地址。
const int start_add_type = (EEPROM.length() - 10);
const int start_add_id = (EEPROM.length() - 4);
然后我看一下这个值(通过RS232)
Serial.begin(9600);
Serial.println(start_add_type);
Serial.println(start_add_id);
在setup()开始时看到我们
1014
1020
然后我再看一遍
Serial.println(start_add_type);
Serial.println(start_add_id);
我得到了
1014
818
我不明白为什么这应该改变。我试过把它们称为const例如常量
const int start_add_type = (EEPROM.length() - 10);
const int start_add_id = (EEPROM.length() - 4);
但这给出了相同的结果。所以在这里我非常困惑于我一定错过的东西。有人有任何想法吗?
#include "EEPROM.h"
int start_add_type = (EEPROM.length() - 10);
int start_add_id = (EEPROM.length() - 4);
char ID[7] = "ENCPG2";
char Stored_ID[5];
char Input[10];
//String Type;
void setup()
{
Serial.begin(9600);
Serial.println(start_add_type);
Serial.println(start_add_id);
// start_add = (EEPROM.length() - 10); // use this method to be PCB independent.
for (int i = 0; i < 6; i++)
{
Stored_ID[i] = EEPROM.read(start_add_type + i); // Read the ID into the EEPROM.
}
if (Stored_ID != ID) // Check if the one we have got is the same as the one in this code ID[7]
{
for (int i = 0; i < 6; i++)
{
EEPROM.write(start_add_type + i, ID[i]); // Write the ID into the EEPROM.
}
}
Serial.println(start_add_type);
Serial.println(start_add_id);
}
void loop()
{
}
答案 0 :(得分:1)
你正在这个循环中覆盖你的记忆:
for (int i = 0; i < 6; i++)
{
Stored_ID[i] = EEPROM.read(start_add_type + i);
}
Stored_ID数组长5个字节,因此写入Stored_ID [5]也会重写 start_add_id 变量,因此奇怪的值818,等于0x0332 HEX和0x32是&#39; 2&#39;您的身份证件的字符
要解决此问题,请以这种方式声明Stored_ID:
char Stored_ID[6];
答案 1 :(得分:0)
if(Stored_ID!= ID)
这是无稽之谈:您比较两个不同的地址,它们永远不会相等。如果要比较内容,则应该循环执行。 (例如,直接将EEPROM值读入Stored_ID [i])
或者,Stored_ID也可以是以0结尾的文本,您可以使用
if(strcmp(Stored_ID,ID)!= 0)