2016-06-07 6 views
0

ich den Code unten laufen und die Serien geprüft, um zu sehen, dass es nur gedruckt „Initialisierung SD-Karte“ dann mit „Erledigt SD“ ein eingeben und dann stopptArduino Serien nicht druckt keine weiteren Zeichen

Voll Code:

#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"); 

} 

Seltsame Sache ist, dass es vollständig "Done SD Card" drucken soll, aber auf halbem Weg stoppt. Ich habe bereits die Fixed-Kodierung versucht, aber es funktioniert nicht.

Was meine Lösung für dieses

Antwort

0

Die sprintf nach dem print("Done SD card") ist Wegwerfen Speicher sein würde, weil Sie keinen Raum erklären haben die Dateinamenzeichen zu erhalten:

char *fileName; 

, die einen Zeiger zu einem gewissen Speicher , und es wird auf 0 initialisiert. So schreibt die sprintf die Dateinamen Zeichen an Adresse 0. Urk.

erklären nur ein Array, das ausreichend groß zu halten, die vollständigen Dateinamen ist:

char fileName[32]; 

Diese Array-Deklaration auch als char * Argument sprintf geben werden kann. Sie sollten jedoch die sprintf Variante verwenden, die weiß, wann das Schreiben zu beenden ist:

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