2014-12-18 5 views
-1

arduino 보드를 다시 시작하지만 변수 값을 유지하려고합니다. 다시 시작할 때마다 내 솔루션 setup() 전화 것입니다. 다음과 같은 메시지가 표시됩니다.Arduino 재시동 및 변수 유지

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에 과도한 사용이 발생할 것으로 생각했습니다. 아니면 더 좋은 방법이 있습니까?

감사합니다.

+0

setup() 내부에서 setup()을 호출하면 스택 오버플로가 발생합니다. (예, RAM을 모두 소모합니다.) – UncleO

+0

아마도 setup()에서는 아니지만 while 루프()에서 .... (예 : 일부 버튼을 눌렀을 때/어떤 경우에는 코드가 –

+0

UncleO가 말했듯이 코드가 그대로 스택 오버플로를 유발합니다 (BTW : loop()가 실행되지 않습니다) – Vagaus

답변

0

EEPROM 라이브러리를 사용하십시오. 변수를 저장하는 인터럽트가있는 버튼이 있으면 setup() 루틴에서 변수를 읽습니다.

정보가 느리거나 변경되는 경우에는 계속해서 값을 쓸 수 있지만이 칩의 EEPROM은 바이트 당 100,000 개의 쓰기로만 인증됩니다.

+0

최대 10 만 번만 쓸 수 있기 때문에 EEPROM을 사용하지 않으려했습니다 .... (장기간의 해결책이 아닙니까?) –

+0

얼마나 자주 데이터를 보관해야합니까? 한 시간에 한 번 저장하면 11 세에 실패 할 것입니다. 이것은 전체 EEPROM 영역을 사용하기 위해 매번 다른 섹터에 기록함으로써 엄청나게 확장 될 수 있습니다. 항상 유스 케이스에 달려있다. 정규 쓰기가 더 필요한 경우 대체 일정이 포함 된 외부 소켓 EEPROM을 사용할 수 있습니다. 그 시점에서 당신은 또한 sdcard를 사용할 수 있고 더 많은 유연성을 가질 수 있습니다. – djUniversal

+0

저장해야하는 데이터의 양과 저장 빈도는 얼마나됩니까? – djUniversal