如何使用带Arduino的SD库的char *?

时间:2015-08-19 23:58:20

标签: arduino

我正在编写数据记录器,并希望将文件限制为特定数量的条目。我试图在设置中编写这段代码,这样当Arduino启动时,它会写入一个新文件,只是为了简单起见。但是,当我尝试打开文件时我无法做到,尽管我不确定原因。有人可以提供任何解释吗?

char *fileName; //global name 
File logFile; //global file 
//everything else is in setup() 
char * topPart = "/Data/Data"; //first part of every file 
char * lowerPart = ".txt"; // jus the extention 
char * itter; //used to hold the char of i later 
fileName = "/Data/Data.txt"; //start with the first file possible.
for(int i=0; i<=100;i++) {
  if(!SD.exists(fileName)) {
    Serial.print("opening file: ");
    Serial.print(fileName);
    logFile = SD.open(fileName, FILE_WRITE);
    if(logFile) {
      logFile.println("I made it");
      Serial.println("in the file");
    }
    if(!logFile) {
      Serial.println("somthing bad");
    }
    break;
  } else {
    itter = (char *)(i+48);
    strcpy(fileName,topPart);
    strcpy(fileName,itter);
    strcpy(fileName,lowerPart);
    Serial.println(i);
  }
}

1 个答案:

答案 0 :(得分:0)

很多问题。

  • itter的构造错误。
  • strcpy不会仅附加cpy。

以下是构建文件名的代码示例。这是一个基本的C程序。删除Arduino的#include和main,这允许在您的计算机上测试程序是否正常。

#include <string.h> 

#define TOPPART "/Data/Data" 
#define LOWERPART ".txt"

int main(void) {
  char buf[64];
  snprintf(buf, sizeof(buf), "%s%s", TOPPART, LOWERPART);
  for (int i = 0; i < 100; i++) {
    /* here your stuff to check if the filename froml buf exists*/
    snprintf(buf, sizeof(buf), "%s%d%s", TOPPART, i, LOWERPART);
  }
  return 0;
}