用C ++进行二进制读写

时间:2017-01-23 15:27:31

标签: c++ microcontroller sd-card

我正在制作一个数据记录器项目。在我的数据记录器中,我有5个传感器,如:温度,湿度,加速度计,光和气压计。

这里,我将数据以二进制格式存储到SD卡中。我在1HZ存储加速度计@ 3200HZ和所有其他传感器。

写作时,我在每个测量中添加一个特殊字符,如下所示。

 if(DRDY)
  { 
    fwrite(&accdata,sizeof(char),1,logFile);  // accelerometer special char         
    accelerometer.getOutput(readings);
    int16_t store[3] = {(int16_t)readings[0],(int16_t)readings[1],(int16_t)readings[2]};  // accelerometer data
    fwrite((store),sizeof(int16_t),3,logFile);

   } 


    if(flag_humi)
  { 
    flag_humi = 0;
   fwrite(humidata,sizeof(char),1,logFile); // humidity character
   float store2[1] = {sht.readHumidity()};  // humidity data
   fwrite(store2,sizeof(float),1,logFile);
   }
    if(flag_temp)
  { 
   flag_temp = 0;
   fwrite(tempdata,sizeof(char),1,logFile);  // temp character
   float store1[1] = { sht.readTemp()};   // temp data
   fwrite(store1,sizeof(float),1,logFile);
  }

在阅读时,它会根据特殊字符分隔数据。

   while ((nr = fgetc(logFile)) != EOF){
       if (nr == 5){    // 5 is special character  for accelerometer
         fread(read,sizeof(int16_t),3,logFile);
          pc.printf("\r\n %i, %i, %i ",read[0],read[1],read[2]);
              }


    else if(nr == 10){  // 10 is char for temp
           fread(temp_read,sizeof(float),1,logFile); 
           pc.printf("\r\n %f",temp_read[0]);
                     }
    else  if(nr ==15)   // 15 is character for humidity
                    { 
          fread(humi_read,sizeof(float),1,logFile); 
          pc.printf("\r\n %f",humi_read[0]);
                   }

一切都很好。现在我想删除加速度计的特殊字符,因为写特殊字符会丢失一些样本。

我试过写一次没有spl.character的加速度计和其他带有spl.character的传感器。

在读书的时候,我以为我只能保留其他读取加速度计的权利,因为其他人还有其它方法。

   while ((nr = fgetc(logFile)) != EOF){
    if(nr == 10){  // 10 is char for temp
           fread(temp_read,sizeof(float),1,logFile); 
           pc.printf("\r\n %f",temp_read[0]);
                     }
    else  if(nr ==15)   // 15 is character for humidity
                    { 
          fread(humi_read,sizeof(float),1,logFile); 
          pc.printf("\r\n %f",humi_read[0]);
                   }
    else  {    // 5 is special character  for accelerometer
         fread(read,sizeof(int16_t),3,logFile);
          pc.printf("\r\n %i, %i, %i ",read[0],read[1],read[2]);
              }

但它显示了所有错误的价值观,并且势不可挡。我怎么能做到这一点?

0 个答案:

没有答案