2017-03-04 2 views
1

Comment puis-je obtenir l'Arduino pour écrire les données de mesure sur la carte micro SD lorsque la fonction d'écriture n'accepte que des nombres entiers?Comment écrire des entiers sur une carte micro SD sur un Arduino

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

int CS_PIN = 10; 
int ledPin = 13; 
int EP =9; 



File file; 

void setup() 
{ 

    Serial.begin(9600); 
    pinMode(ledPin, OUTPUT); 
    pinMode(EP, INPUT); 

    initializeSD(); 



} 


void loop(){ 
    long measurement =TP_init(); 
    delay(50); 
// Serial.print("measurment = "); 
    Serial.println(measurement); 

    createFile("test.txt"); 
    writeToFile(measurement); 
    closeFile(); 
} 



long TP_init(){ 
    delay(10); 
    long measurement=pulseIn (EP, HIGH); //wait for the pin to get HIGH and returns measurement 
    return String(measurement); 

} 





void initializeSD() 
{ 
    Serial.println("Initializing SD card..."); 
    pinMode(CS_PIN, OUTPUT); 

    if (SD.begin()) 
    { 
    Serial.println("SD card is ready to use."); 
    } else 
    { 
    Serial.println("SD card initialization failed"); 
    return; 
    } 
} 

int createFile(char filename[]) 
{ 
    file = SD.open(filename, FILE_WRITE); 

    if (file) 
    { 
    Serial.println("File created successfully."); 
    return 1; 
    } else 
    { 
    Serial.println("Error while creating file."); 
    return 0; 
    } 
} 

int writeToFile(char text[]) 
{ 
    if (file) 
    { 
    file.println(text); 
    Serial.println("Writing to file: "); 
    Serial.println(text); 
    return 1; 
    } else 
    { 
    Serial.println("Couldn't write to file"); 
    return 0; 
    } 
} 

void closeFile() 
{ 
    if (file) 
    { 
    file.close(); 
    Serial.println("File closed"); 
    } 
} 

int openFile(char filename[]) 
{ 
    file = SD.open(filename); 
    if (file) 
    { 
    Serial.println("File opened with success!"); 
    return 1; 
    } else 
    { 
    Serial.println("Error opening file..."); 
    return 0; 
    } 
} 

String readLine() 
{ 
    String received = ""; 
    char ch; 
    while (file.available()) 
    { 
    ch = file.read(); 
    if (ch == '\n') 
    { 
     return String(received); 
    } 
    else 
    { 
     received += ch; 
    } 
    } 
    return ""; 
} 
+0

Pourquoi vous déclarez la valeur retournée de 'TP_init () 'comme un' long' et retournant dans la fonction un 'String' (' return String (measurement); ')? –

Répondre

0

Vous pouvez écrire une valeur de 4 long d'octets en utilisant la variante de la fonction write qui accepte un tampon et un nombre d'octets. Il suffit de passer l'adresse de la variable que vous voulez écrire et la taille du type:

long measurement; 

file.write((byte*)&measurement, sizeof(long)); // write 4 bytes 

Vous pouvez le lire comme ceci:

file.read((byte*)&measurement, sizeof(long)); // read 4 bytes 
+0

Que voulez-vous dire, est-ce que je voudrais mettre le fichier, écrire des choses dans la fonction d'écriture dans un fichier? –

+0

La fonction writeToFile écrit une chaîne de caractères, vous ne pouvez donc pas la placer là. Ecrire une autre fonction writeLongToFile ou similaire – samgak