데이터 로거 프로젝트를 만들고 있습니다. 데이터 로거에는 온도, 습도, 가속도계, 조명 및 기압계와 같은 5 가지 센서가 있습니다. 여기에서 데이터를 이진 형식의 SD 카드에 저장합니다. 나는 가속도계 @ 3200HZ와 모든 다른 센서들을 1HZ에 저장하고있다.다른 데이터 형식의 이진 데이터 읽기
글을 쓰는 동안 나는 각 센서 측정치에 $, &과 같은 특수 문자를 추가하여 읽는 동안 데이터를 식별합니다. 나는 가속도계 데이터에 어떤 스플래트 문자도 추가하지 않을 것이다. 가속도계 데이터는 3200HZ의 대용량 데이터이므로 일부 메모리를 소비하면서 스플라인 문자를 추가하지 않고 일부 샘플을 놓치고 3200HZ의 경우에만 2600HZ를 얻을 수 있습니다. 잘못된 데이터를 제공
while((nr = fgetc(logFile)) != EOF)
{
if (nr == '$')
{ // read temp data if nr = $
fread(&temp_read,sizeof(float),1,logFile);
pc.printf("\r\n %f",temp_read);
}
if (nr == '&')
{ // read humidity data if nr = &
fread(&Humidity_read,sizeof(float),1,logFile);
pc.printf("\r\n %f",Humidity_read);
}
else
{ // if nr is not a spl character
data1 = nr;// send nr to a variable.
nr = fgetc(logFile);// read next byte and save it in nr
data2 = nr;// send nr to another variable
int16_t temp = (data1 | (data2 << 8));// club both bytes to form int16_t data
pc.printf("\r\n %i",temp);// print the one axis
}
}
불행하게도이 프로그램 :
내 데이터를 읽는 코드는 다음과 같습니다. 엄청난 차이가 있습니다. 이 문제를 해결할 다른 방법이 있습니까? 내가 어디에서 실수하는지. 미리 감사드립니다.
이 * 특별한 * 문자가 정말 이진 표현되는 특별한 아니라는 것을 참조하십시오? 바이너리 데이터를 읽으려면 먼저 fgetc와 같은 텍스트 지향 함수를 읽어야한다. 다음으로 데이터를 올바르게 구분하는 방법을 생각해보십시오. 힌트 : 고정 폭/바이트 스터핑/텍스트 인코딩. –
첫 번째 질문은 SPI가 SD 카드에 올바르게 읽고 쓰고 있는지 확인하는 것입니다. 더미 데이터를 매우 저속 읽기 및 쓰기로 시도해 보셨습니까? – DiBosco
우선 : 코드를 들여 씁니다. –