重新启动Arduino并保留变量

重新启动Arduino并保留变量,arduino,restart,Arduino,Restart,我想重新启动arduino板,但保留一些变量的值。我的解决方案是每当我想重新启动时调用setup()。大概是这样的: int led = 13; int led2 = 50; boolean restart = false; void setup() { pinMode(led, OUTPUT); pinMode(led2, OUTPUT); if(!restart){ digitalWrite(led, LOW); // will only happe

我想重新启动arduino板,但保留一些变量的值。我的解决方案是每当我想重新启动时调用
setup()
。大概是这样的:

int led = 13;
int led2 = 50;
boolean restart = false;

void setup() {     

  pinMode(led, OUTPUT); 
  pinMode(led2, OUTPUT); 

  if(!restart){
    digitalWrite(led, LOW);  // will only happen once
    delay(3000);
  }

  digitalWrite(led, HIGH);   // turn the LED on (and will be always on even after reset)
  restart = true;
  delay(3000);
  digitalWrite(led2, HIGH); // indicate restart is called
  delay(1000);
  digitalWrite(led2, LOW);
  setup();}

void loop() {         }
我在想这是否会导致RAM的大量使用。还是有更好的方法


谢谢。

使用EEPROM库。使用带有中断的按钮保存变量,然后在setup()例程中读取变量


如果您获取或更改信息的速度足够慢,您可以不断写入该值,但请注意,该芯片上的EEPROM仅被认证为每字节100000次写入。

从setup()内部调用setup()将导致堆栈溢出。(是的,这将耗尽所有RAM。)嗯,可能不是在setup()中,而是在loop()中偶尔出现一次(例如,当按下一些按钮时/在某些情况下,代码将从头开始)。正如UncleO所说,代码本身肯定会导致堆栈溢出(顺便说一句:loop()将永远不会运行)为什么需要重新启动arduino?我正在使用带GSM屏蔽的arduino,这样它可以读取读数并返回到服务器(PC)。但有时GSM屏蔽会断开连接,我想重新启动Arduino并允许它再次连接到服务器……我不希望使用EEPROM,因为它最多只能写入100000次……(不是长期解决方案?)。您需要多久保留一次数据?如果您每小时保存一次,您将在11年后开始出现故障。通过每次写入不同的扇区以使用整个EEPROM区域,可以极大地扩展这一功能。它将始终取决于您的用例。如果您需要更多的定期写入,您可以使用带有更换时间表的外部插座EEPROM。在这一点上,您还可以使用SD卡,并具有更大的灵活性。您需要保存多少数据以及多久保存一次?