2013-03-11 5 views
1

현재 Arduino의 EEPROM에 데이터를 저장하는 함수를 작성하려고합니다. 지금까지는 지정된 문자열을 작성한 다음 프로그램이 처음 실행될 때 다시 읽었습니다. 첫 번째 바이트로 문자열의 길이를 저장하려고하고 내 코드는 다음과 같습니다.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의 첫 번째 바이트를 읽을 때 예상되는 길이 값을 얻는 것입니다. 그러나 루프는 세 번만 실행됩니다. 내 코드에서 몇 가지 흥미로운 점을 언급했지만 오류는 어디에 있습니까?

답변

2

당신은 정말로 정확합니다. 많은 부분에서 저는 생각합니다. 작성이 시도 :

// 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)); 

다음 읽으려면 :이 아두 이노를 위해 개발 된 String 클래스를 사용하지 않는 것을

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++; 
} 

참고 : 읽기와 쓰기는 다를 것입니다. 그러나 이상은 배열 문자열 char에 적용됩니다.

참고하지만, EEPROM_write()이제 일반적인를 보이는 동안 addr가 harcoded되어 있기 때문에, 그것은 정말 아니라고. EEPROM 시작 부분에만 데이터를 쓸 수 있습니다.

+0

대단히 고맙습니다. 설정 한 수의 값을 저장할 간단한 시스템을 구축하고 있습니다. 이것은 좋은 시작입니다 :) 다시, 고마워요. –