当写入功能只接受整数时,如何让Arduino将测量数据写入micro SD卡?
#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 :(得分:1)
您可以使用接受缓冲区和字节计数的write函数的变体来写入4字节long
值。只需传递要写出的变量的地址和类型的大小:
long measurement;
file.write((byte*)&measurement, sizeof(long)); // write 4 bytes
你可以这样读:
file.read((byte*)&measurement, sizeof(long)); // read 4 bytes