我正在开发一个项目,该项目需要从连接到LCD键盘护罩的传感器保存数据。信息应保存在SD卡上的文件中。
我的代码:
#include <LiquidCrystal.h>
#include <SD.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
int buttons;
File myFile;
//name of the file
char nombrefichero[12];
int i = 1;
int exist = LOW ;
void setup() {
Serial.begin(9600);
//check the sd card adapter
Serial.print("Iniciando SD ...");
if (!SD.begin(53)) {
Serial.println("No se pudo inicializar");
return;
}
Serial.println("inicializacion exitosa");
}
void loop() {
// use the buttons of the lcd keypad shield in analog 0
buttons = analogRead(0);
//button right
if(buttons < 50) {
count ++;
nuevo();
}
//button select
if(buttons < 790) {
capturar();
}
}
void capturar() {
myFile = SD.open(nombrefichero, FILE_WRITE);//abrimos el archivo
if (myFile) {
Serial.print("Escribiendo SD: ");
int sensor1 = analogRead(0);
int sensor2 = analogRead(1);
int sensor3 = analogRead(2);
myFile.print(millis());
myFile.print(",");
myFile.print(sensor1);
myFile.print(",");
myFile.print(sensor2);
myFile.print(",");
myFile.println(sensor3);
myFile.close(); //cerramos el archivo
Serial.print("Tiempo(ms)=");
Serial.print(millis());
Serial.print(",sensor1=");
Serial.print(sensor1);
Serial.print(",sensor2=");
Serial.print(sensor2);
Serial.print(",sensor3=");
Serial.println(sensor3);
} else {
// if the file didn't open, print an error:
Serial.println("Error al abrir el archivo");
}
delay(1000);
}
void nuevo() {
while (exist == LOW) {
sprintf(nombrefichero, "M%d.txt",i);
//generate autoincrement number of file
if(SD.exists(nombrefichero)) {
i = i+1;
myFile = SD.open(nombrefichero, FILE_WRITE);
if (myFile) {
Serial.println("Archivo nuevo, Escribiendo encabezado(fila 1)");
myFile.println("Tiempo(ms),Sensor1,Sensor2,Sensor3");
myFile.close();
} else {
exist = HIGH;
Serial.println("Error creando el archivo");
}
}
}
}
当我按下选择按钮时,我需要捕获传感器的信息,当按下右键时,我需要创建一个新文件。
在这个方法中,如果我把!放在 SD.exists 之前, if(SD.exists(nombrefichero))文件是无限创建的,但是如果我没有!就离开它,按钮什么都不做。
void nuevo() {
while (exist == LOW) {
sprintf(nombrefichero, "M%d.txt",i);
if(SD.exists(nombrefichero)) {
i = i+1;
myFile = SD.open(nombrefichero, FILE_WRITE);
if (myFile) {
Serial.println("Archivo nuevo, Escribiendo encabezado(fila 1)");
myFile.println("Tiempo(ms),Sensor1,Sensor2,Sensor3");
myFile.close();
} else {
exist = HIGH;
Serial.println("Error creando el archivo");
}
}
}
}
我使用的是Arduino Mega 2560和SD卡适配器。