ATtiny85 eeprom 写入 arduino IDE
ATtiny85 eeprom write in the arduino IDE
我有一个问题:我可以从我的 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);
}
}
我总是只得到 teh 值 255。在每个地址上。
现在我将我的 int 转换为 byte。在我的情况下,我的 int 不会超过 255。
顺便说一句:我可以创建一个 int as byte 吗?所以我可以像普通的int一样使用它,但是可以直接写吗?
尽量不要在循环中写入 eeprom,我想,eeprom 的 write/read 循环次数有限。您应该显示您在终端中读取和写入的值。
你写的是一个字节,而 int
是两个字节。您可以对较大的类型使用 EEPROM.get()
& EEPROM.put()
(read/write 仅处理单个字节)。
#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
我有一个问题:我可以从我的 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);
}
}
我总是只得到 teh 值 255。在每个地址上。 现在我将我的 int 转换为 byte。在我的情况下,我的 int 不会超过 255。
顺便说一句:我可以创建一个 int as byte 吗?所以我可以像普通的int一样使用它,但是可以直接写吗?
尽量不要在循环中写入 eeprom,我想,eeprom 的 write/read 循环次数有限。您应该显示您在终端中读取和写入的值。
你写的是一个字节,而 int
是两个字节。您可以对较大的类型使用 EEPROM.get()
& EEPROM.put()
(read/write 仅处理单个字节)。
#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