gpt4 book ai didi

arduino - 将数据写入 Arduino 的板载 EEPROM

转载 作者:行者123 更新时间:2023-12-04 05:07:24 24 4
gpt4 key购买 nike

我目前正在尝试编写一个函数来将数据存储到我的 Arduino 上的 EEPROM。到目前为止,我只是编写一个指定的字符串,然后在程序首次运行时将其读回。我试图将字符串的长度存储为第一个字节,我的代码如下;

#include <EEPROM.h>
#include <LiquidCrystal.h>

LiquidCrystal lcd(8, 13, 9, 4, 5, 6, 7);
char string[] = "Test";

void setup() {
lcd.begin( 16, 2 );
for (int i = 1; i <= EEPROM.read(0); i++){ // Here is my error
lcd.write(EEPROM.read(i));
}
delay(5000);
EEPROM_write(string);
}

void loop() {
}

void EEPROM_write(char data[])
{
lcd.clear();
int length = sizeof(data); // I think my problem originates here!
for (int i = 0; i <= length + 2; i++){
if (i == 0){
EEPROM.write(i, length); // Am I storing the length correctly?
lcd.write(length);
}
else{
byte character = data[i - 1];
EEPROM.write(i, character);
lcd.write(character);
}
}
}

我遇到的问题是当我读取 EEPROM 的第一个字节时,我得到了假定的长度值。但是,循环只运行了 3 次。我在我的代码中评论了一些有趣的点,但是错误在哪里?

最佳答案

你确实是对的,在很多方面,我认为。试试这个来写:

// Function takes a void pointer to data, and how much to write (no other way to know)
// Could also take a starting address, and return the size of the reach chunk, to be more generic
void EEPROM_write(void * data, byte datasize) {
int addr = 0;
EEPROM.write(addr++, datasize);
for (int i=0; i<datasize; i++) {
EEPROM.write(addr++, data[i]);
}
}

你会这样称呼它:
char[] stringToWrite = "Test";
EEPROM_write(stringToWrite, strlen(stringToWrite));

然后阅读:
int addr = 0;
byte datasize = EEPROM.read(addr++);
char stringToRead[0x20]; // allocate enough space for the string here!
char * readLoc = stringToRead;
for (int i=0;i<datasize; i++) {
readLoc = EEPROM.read(addr++);
readLoc++;
}

请注意,这不是使用 String为 Arduino 开发的类:阅读和写作会有所不同。但以上应该适用于 char数组字符串。

但是请注意,虽然 EEPROM_write()现在看起来很一般,其实不然,因为 addr是硬编码的。它只能向 EEPROM 的开头写入数据。

关于arduino - 将数据写入 Arduino 的板载 EEPROM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15350152/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com