ATtiny85 eeprom写入arduino IDE

时间:2016-04-03 15:33:59

标签: arduino eeprom attiny

我遇到了一个问题:我可以从我的ATtiny读取EEPROM,但我无法在其中写入内容。

这是我的代码:

    #include <EEPROM.h>
    int addr = 0;
    int val = 2;

    void setup()
    {
    }

    void loop()
    {
      EEPROM.write(addr, val);

      addr = addr + 1;
      if (addr == 512)
        addr = 0;
    }

- 编辑

现在我的写代码是:

#include <EEPROM.h>

int addr = 0;
int val = 2;

void setup()
{
}

void loop()
{
  EEPROM.write(addr, byte(val));

  addr = addr + 1;
  if (addr == 512)
    while(1);
}

我的阅读代码:

int address = 0;
byte value;

#include <SoftwareSerial.h>

void setup()
{
  SSerial.begin(9600);
}

void loop()
{
  value = EEPROM.read(address);

  SSerial.print(address);
  SSerial.print("\t");
  SSerial.print(value, DEC);
  SSerial.println();

  address = address + 1;

  if (address == 512){
    address = 0;
    delay(100000000);
  }
}

我总是只获得255的价值。在每个地址上。 现在我将我的int转换为byte。我的int在我的情况下不会超过255。

顺便说一下:我可以创建一个int作为字节吗?所以我可以像普通的int一样使用它,但是可以直接写它吗?

2 个答案:

答案 0 :(得分:1)

您正在写一个字节,而int是两个字节。您可以使用EEPROM.get()&amp; EEPROM.put()用于较大的类型(读/写只处理单个字节)。

#include <EEPROM.h>
int addr = 0;
int val = 2;

void setup(){}

void loop(){

  //Write value
  EEPROM.put(addr, val);

  //Read value
  EEPROM.get(addr, val);

  addr += sizeof(int);  //Increment cursor by two otherwise writes will overlap.

  if(addr == EEPROM.length())
    addr = 0;
}
正如Vladimir Tsykunov所提到的,这个测试代码对你的EEPROM来说可能不好,因为它会在运行时循环很多次。在一次迭代后停止循环可能更好:

  if(addr == EEPROM.length())
    while(1); //Infinite loop

答案 1 :(得分:0)

尝试不在循环中写入eeprom,我想,eeprom的写/读周期数有限。您应该显示您在终端中读取和写入的值。