Arduino Serial不再打印任何字符

时间:2016-06-07 09:14:10

标签: arduino serial-port

我运行下面的代码并检查序列,看它是否只打印"初始化SD卡"然后输入"完成SD"然后停止

完整代码:

#include <SPI.h>
#include <SD.h>

#define SD_PIN 10 //Pin at CS
#define BUZZER_PIN 3
#define TEMP_PIN A2

File sampletext;
int tempVoltage;
int celsius;
char *fileName;

void setup()
{ 

      pinMode(BUZZER_PIN, OUTPUT);

      Serial.begin(9600);
      while(!Serial)
      {
        delay(100); // Wait to open a Serial
      }

      Serial.println("Initializing SD card...");
      if (!SD.begin(10))
      {
        Serial.println("Failed SD card");
        return;
      }

      Serial.println("Done SD card");

      sprintf(fileName, "%s_%s.txt", __DATE__, __TIME__);
      sampletext = SD.open(fileName, FILE_WRITE);
      if(!sampletext)
      {
        Serial.println("Failed to write to file");
        return;
      }
      Serial.println("Setup Done. Exit Serial to close program");
    }

    void loop()
    {
      if(!Serial)
      {
        sampletext.close();
        return;
      }
      tempVoltage = analogRead(TEMP_PIN);
      celsius = ((tempVoltage/1024.0)*5000)/10;
      sampletext = SD.open(fileName, FILE_WRITE);
      sampletext.println(__DATE__ );
      sampletext.print(__TIME__ );
      sampletext.print("Temp = ");
      sampletext.print(celsius);
      sampletext.print("C");

}

奇怪的是,它应该完全打印&#34;完成SD卡&#34;但是停了一半。我已经尝试过固定编码选项,但它不起作用。

我的解决方案是什么

1 个答案:

答案 0 :(得分:0)

sprintf之后的print("Done SD card")是垃圾内存,因为您没有声明任何空格来接收文件名字符:

char *fileName;

这是一个指向某个内存的指针,它被初始化为0.所以sprintf正在将文件名字符写入地址0. Urk。

只需声明一个足够大的数组来保存完整的文件名:

char fileName[32];

此数组声明也可以作为char *参数传递给sprintf。但是,您应该使用知道何时停止写入的sprintf变体:

snprintf(fileName, sizeof(fileName), "%s_%s.txt", __DATE__, __TIME__);