【问题标题】:Pass string to class and save to eeprom将字符串传递给类并保存到 eeprom
【发布时间】:2015-03-25 14:32:22
【问题描述】:

我正在编写一个类来将数据保存到 Arduino 的 EEPROM。 该类称为 Memory。

该类包含不同的函数和变量。

char serverdefault[15] = "0032484716340";
int pricedefault = 30;

void Memory::FactoryReset()
{
  TotalSold = 0;
  TotalCash = 0;
  Sold = 0;
  Cash = 0;
  Items = 0;

  EEPROM_writeAnything(10, TotalSold);
  EEPROM_writeAnything(20, TotalCash);
  EEPROM_writeAnything(30, Sold);
  EEPROM_writeAnything(40, Cash);
  EEPROM_writeAnything(50, pricedefault);
  EEPROM_writeAnything(60, Items);
  EEPROM_writeAnything(70, serverdefault);

  ReadAll();
}

另一个功能允许更改默认服务器编号。

void Memory::ChangeServer(char *number_str)
{
  EEPROM_writeAnything(70, number_str);
  ReadAll();
}

此功能不起作用。 我在 void setup() 中调用函数。

void setup() 
{
  Serial.begin(9600);
  Serial.println("started");
  Serial.println("factory reset");
  mem.FactoryReset();
  Serial.println("change server number");
  mem.ChangeServer("1234567890123");
}

保存在 EEPROM 中的值被替换为“b32484716340”而不是“1234567890123”。我做错了什么?

【问题讨论】:

  • 什么是EEPROM_writeAnything?它是如何声明的?它有什么作用?
  • Memory::ChangeServer 中,您将指针本身写入 EEPROM(即地址),而不是指针指向的字符串。
  • @JoachimPileborg 这是一个用于写入 EEPROM 的库。 playground.arduino.cc/Code/EEPROMWriteAnything
  • @PaulR 如何将值写入 EEPROM 而不是指针?
  • @JefGys:请参阅下面的答案...

标签: c++ arduino


【解决方案1】:

Memory::ChangeServer 中,您将指针本身写入 EEPROM(即地址),而不是指针指向的字符串。解决此问题的一种方法是:

void Memory::ChangeServer(char *number_str)
{
    for (int i = 0; i <= strlen(number_str); ++i)
    {
        EEPROM_writeAnything(70 + i, number_str[i]);
    }
    ReadAll();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-14
    • 2012-06-13
    • 2020-04-08
    • 2016-06-01
    • 2011-08-16
    相关资源
    最近更新 更多