将LCD KeyPad Shield中的数据保存到SD卡

时间:2017-11-22 01:13:03

标签: c++ windows arduino

我正在开发一个项目,该项目需要从连接到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卡适配器。

0 个答案:

没有答案