Arduino Uno - EEPROM位置不一致

时间:2016-07-19 10:50:52

标签: arduino

我试图将项目写入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()
{
}

2 个答案:

答案 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)