domingo, 20 de noviembre de 2016

TUTORIAL ARDUINO SD CREAR LEER ELIMINAR ARCHIVO CON MONITOR SERIE


    EN ESTE TUTORIAL EXPLICO COMO CREAR UN ARCHIVO EN SD, GUARDAR INFORMACIÓN EN DICHO ARCHIVO TIPO TEXTO, COMO BORRAR UN ARCHIVO Y COMO  VER LA INFORMACIÓN CONTENIDA DENTRO DE LA SD

COMPONENTES:

ARDUINO MEGA
MODULO SD






CONEXIONES:


ARDUINO UNO O MINI
MOSI - pin 11
MISO - pin 12
CLK - pin 13
CS - //ESTE PIN ES DE LIBRE ELECCIÓN SEGÚN DISPONIBILIDAD DE PINES

ARDUINO MEGA
MOSI - pin 51
MISO - pin 50
CLK - pin 52
 ** CS - //ESTE PIN ES DE LIBRE ELECCIÓN SEGÚN DISPONIBILIDAD DE PINES

PARA MAS INFORMACION SOBRE SPI https://www.arduino.cc/en/Reference/SPI


CÓDIGO ARDUINO:

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

File myFile;                  // DECLARAMOS UN myfile
String nombrearchivo; // VARIABLE TIPO STRING PARA GUARDAR EL NOMBE ARCHIVO
String textoescribir;    // DECLARAMOS UNA VARIABLE PARA GUARDAR EL TEXTO
boolean salir=true;     // VARIABLE VERDADERO FALSO PARA EL CONTROL DE  BUCLE
String estado;             // VARIABLE PARA LLAMAR A LOS DIFERENTES PROCESOS


void setup() {
Serial.begin(9600);                                               //INICIAMOS EL PUERTO SERIAL
Serial.print("INICIANDO TARJETA SD ...");    //MOSTRAMOS EL MENSAJE
if (!SD.begin(7)) {                                               //INICIAMOS LA SD EL PIN 7
    Serial.println("INICIACION FALLIDA");    //MOSTRAMOS EL MENSAJE EN CASO QUE SD                                                                              //NO FUNCIONE CORRECTAMENTE
    return;                                
  }
  Serial.println("  INICIADO CORRECTAMENTE");//SI LA SD SE HA INICIADO                                                                                                     //CORRECTAMENTE MOSTRAMOS EL MENSAJE
  Serial.println(" "); //DEJAMOS UN SALTO DE LINEA
  mostrar();     //LLAMAMOS A LA FUNCIÓN PARA MOSTRAR UN MENSAJE
}



void loop() {

 if (Serial.available()> 0){       //SOLO SI HAY DATOS EN COMUNICACIÓN SERIAL
 estado=Serial.readString();    //GUARDAMOS LOS DATOS INTRODUCIDOS
 }

 if (estado.indexOf("1")>=0){  //SI CONTIENE 1
    nombre();                             //LLAMAMOS A LA FUNCIÓN
    recibirtexto();                       //LLAMAMOS A LA FUNCIÓN
    }

  if (estado.indexOf("2")>=0){ //SI CONTIENE 2
      nombre();                           //LLAMAMOS A LA FUNCIÓN
      eliminar();                         //LLAMAMOS A LA FUNCIÓN
      }

  if (estado.indexOf("3")>=0){ //SI CONTIENE 3
      nombre();                            //LLAMAMOS A LA FUNCIÓN
      leersd();                               //LLAMAMOS A LA FUNCIÓN
      }

if (estado.indexOf("4")>=0){  //SI CONTIENE 4
      myFile= SD.open("/");
      listaarchivo(myFile,0);      //LLAMAMOS A LA FUNCIÓN
      Serial.println("PROCESO TERMINADO");    //MOSTRAMOS EL MENSAJE
      mostrar();                          //LLAMAMOS A LA FUNCIÓN
      }
 nombrearchivo=" ";                //VACIAMOS LA VARIABLE
 estado=" ";                              //VACIAMOS LA VARIABLE
 //Serial.flush();

}

// ESTA FUNCIÓN LA UTILIZAMOS PARA MOSTRAR LAS OPCIONES DESPUÉS DE             // REALIZAR ALGUNA DE ELLAS

void mostrar(){
Serial.println("PULSE   1   CREAR UN ARCHIVO E INTRODUCIR DATOS ");
Serial.println("PULSE   2   ELIMINAR UN ARCHIVO ");
Serial.println("PULSE   3   PARA LEER UN ARCHIVO ");
Serial.println("PULSE   4   PARA LEER DATOS SD ");
Serial.println(" ");
}

// ESTA FUNCIÓN NOS COGE EL NOMBRE DE ARCHIVO QUE QUEREMOS                             // LEER,ESCRIBIR, O BORRAR

void nombre(){
salir=true;       // LA PONEMOS A VERDADERO PARA QUE EJECUTE EL BUCLE
Serial.println("ESCRIBA EL NOMBRE DE ARCHIVO TERMINADO en .txt ejemplo juan.txt Y PULSE INTRO");
while (salir) {
      if (Serial.available()> 0){ // SI EL PUERTO SERIE RECIBE
         nombrearchivo=Serial.readString(); //LEEMOS Y LO GUARDAMOS
         nombrearchivo.trim();  //LE QUITAMOS AL STRING LOS CAMPOS VACIOS, SALTO DE PAGINA
         salir=false;           //SALIMOS DEL BUCLE
            }
    }
}

// ESTA FUNCION NO RECIBE EL TEXTO QUE QUEREMOS AÑADIR AL ARCHIVO
void recibirtexto(){
if (nombrearchivo.indexOf(".txt")>=0) //SI EL NOMBRE DEL ARCHIVO TERMINAR EN .TXT
    {
    salir=true;                       //LO PONEMOS EN VERDADERO PARA EJECUTAR EL BUCLE
    Serial.println("nombre correcto");//MOSTRAMOS EN MENSAJE
    Serial.println("ESCRIBA EL TEXTO A GUARDAR EN LA SD Y PULSE INTRO");//MOSTRAMOS EN MENSAJE
        while (salir)                 //ENTRAMOS EN EL BUCLE
        {
        if (Serial.available()> 0)    //SI RECIBE ALGUN DATO
              {
              textoescribir=Serial.readString();//LO GUARAMOS EN LA VARIABLE
              textoescribir.trim();             //QUITAMOS LOS ESPACIOS EN BLANCO
              Serial.println(textoescribir);    //MOSTRAMOS EL TEXTO A GUARDAR
              escribirsd();                     //LLAMAMOS A LA FUNCION
              salir=false;                      //TERMINAMOS EL BUCLE
              }
 
        }
    }
}

// PARA LEER LA INFORMACION DEL ARCHIVO QUE HEMOS ELEGIDO
void leersd(){
myFile = SD.open(nombrearchivo);  //ABRIMOS EL ARCHIVO
  if (myFile) {                   // SI ES CORRECTO EL PROCESO
    while (myFile.available()) {
    Serial.write(myFile.read());  // LEEMOS EL ARCHIVO HASTA EL FINAL
    }
   myFile.close();                // CERRAMOS EL ARCHIVO
  } else {
 
    Serial.println("NO SE ABRIO EL ARCHIVO O NO EXSITE");
  }
mostrar();                        //LLAMOS A LA FUNCION
}

// PARA CREAR O ESCRIBIR EL ARCHIVO SELECIONADO CON EL TEXTO SELECIONADO

void escribirsd(){
myFile = SD.open(nombrearchivo, FILE_WRITE); //ABRIMOS O CREAAMOS UN ARCHIVO
if (myFile){                                 //SI EL PROCESO ES CORRECTO
myFile.println(textoescribir);               // ESCRIBIMOS EL TEXTO EN EL ARCHICO
myFile.close();                              // CERREMOS EL ARCHIVO
Serial.println("TEXTO GUARDADO CORRECTAMENTE"); // MOSTRAMOS EL MENSAJE
}
else{
  Serial.println("ERROR A GUARDADAR TEXTO");  //MOSTRAMOS EL MENSAJE
  }
mostrar();                                   //LLAMAMOS A LA FUNCION
}

// PARA ELIMINAR EL ARCHIVO QUE HEMOS SELECIONADO
void eliminar(){                    
 if (SD.exists(nombrearchivo)) {        // SI EXISTE EL ARCHIVO
    SD.remove(nombrearchivo);           // ELIMINAMOD EL ARCHIVO
    Serial.println("ARCHIVO BORRADO");  // MOSTRAMOS EL MENSAJE
  } else {
    Serial.println("EL ARCHIVO NO EXISTE");// SI NO EXISTE EL ARCHIVO MOSTRAMOS EL MENSAJE
  }
mostrar();                              // LLAMAMOS A LA FUNCION
}

void listaarchivo(File dir, int numTabs){

while (true) {
  File entry =  dir.openNextFile();
    if (! entry) {
      // no more files
      break;
    }
    for (uint8_t i = 0; i < numTabs; i++) {
      Serial.print('\t');
    }
    Serial.print(entry.name());
    if (entry.isDirectory()) {
    Serial.println("/");
    listaarchivo(entry, numTabs + 1);
    } else {
      // files have sizes, directories do not
    Serial.print("\t\t");
    Serial.println(entry.size(), DEC);
    }
    entry.close();
  }

}

No hay comentarios:

Publicar un comentario