Contenido del curso

Actividad 28

 

Registro de eventos con Micro SD

Imagina que estás programando un sistema que registra el accionamiento de la puerta de garaje de una comunidad de vecinos, como en la Actividad 27. En esta ocasión, simularemos la apertura de la puerta con un pulsador y guardaremos un mensaje cada vez que el pulsador se accione. Llevaremos la cuenta de las veces que la puerta se ha abierto en un archivo que llamaremos "Registro.txt" dentro de la Tarjeta Micro SD. Además, vamos a mostrar la cuenta de aperturas en el Display 7 segmentos para verificar que el archivo tiene el número correcto cuando revisemos el archivo de la tarjeta en un ordenador.


Recuerda que, la extensión de MentorBit para mBlock, incluye el siguiente bloque con el que podemos
controlar la Tarjeta Micro SD:



Ten en cuenta que, el nombre del archivo que quieras manejar dentro de la Tarjeta Micro SD, debe llevar
la extensión del mismo en el propio nombre (por ejemplo, "Prueba.txt"). Además, debes indicar la
ubicación del archivo dentro de la Tarjeta, por ejemplo, normalmente ubicaremos el archivo nada más
abrir la Micro SD, por lo que el nombre completo del archivo sería "/Prueba.txt".
Recuerda que, para incluir una librería previamente instalada en nuestro programa, debemos utilizar
la sentencia siguiente:

#include <MentorBitDataLogger.h>

En nuestro ejemplo, incluiremos la librería MentorBitDataLogger, que facilita el uso del Reloj en Tiempo Real con MentorBit.
Recuerda que, para utilizar la Tarjeta Micro SD, primero debes inicializarla utilizando la siguiente función:

miMentorBitDataLogger.inicializarSD();
Recuerda que, para escribir es un archivo dentro de la Tarjeta Micro SD, puedes utilizar la siguiente
función:

miMentorBitDataLogger.escribirEnArchivo(ARCHIVO, MENSAJE);

Donde ARCHIVO es el nombre del archivo (con la extensión, por ejemplo "Prueba.txt") en el que queremos escribir el MENSAJE entregado a la función. Ten en cuenta que el nombre del archivo no puede ser de más de ocho caracteres, mientras la extensión no puede ser de más de tres.
Ten en cuenta que, siempre que inicializamos una Tarjeta Micro SD, debemos comprobar que se ha hecho correctamente, ya que puede fallar por varios factores, como un nombre de archivo inválido o una Tarjeta en mal estado. Para hacer esta comprobación, podemos inicializar la Tarjeta Micro SD utilizando el siguiente fragmento de código, que se aprovecha de que la función inicializarSD devuelve un booleano, en función de si se ha podido, o no, iniciar la Tarjeta:

if(miDataLogger.inicializarSD()) {

    // Tarjeta Micro SD iniciada correctamente

} else {

    // Algo fue mal con la Tarjeta Micro SD

}
Recuerda que, el bloque Guardar de nuestra librería, añade directamente la extensión .txt al archivo.



Puedes descargar la solución pinchando en el siguiente icono:



#include <MentorBit.h>
#include <MentorBitDisplay.h>
#include <MentorBitDataLogger.h>

// Declaración de instancia de las clases
MentorBit miMentorBit;
MentorBitDisplay miDisplay;
MentorBitDataLogger miDataLogger;

// Variable con la cuenta de aperturas
int aperturas = 0;

// Nombre del archivo en la tarjeta SD
String archivo = "Registro.txt";

// Variable para verificar si la tarjeta SD está insertada
bool sdInsertada = true;  // Al principio asumimos que la SD está insertada

// Inicialización del sketch
void setup() {
    // Inicializamos la comunicación serie para depuración
    Serial.begin(9600);

    // Inicializamos el display de 7 segmentos
    miDisplay.inicializarDisplay();

    // Inicializamos el pulsador
    pinMode(miMentorBit.PULSADOR_PULLDOWN_DIGITAL, INPUT);

    // Comprobamos que la tarjeta Micro SD se inicialice correctamente
    sdInsertada = miDataLogger.inicializarSD();
    if (sdInsertada) {
        // Guardamos un primer mensaje distintivo al comienzo del registro
        miDataLogger.escribirEnArchivo(archivo, "---- Registro de aperturas ----");
    } else {
        // Si no se puede inicializar la tarjeta SD, mostramos el mensaje de error en el display
        miDisplay.imprimir("Error SD");
    }

    // Imprimir mensaje de inicio
    Serial.println("Sistema iniciado. Contador de aperturas: 0");
}

// Bucle principal del sketch
void loop() {
    // Comprobamos si la tarjeta SD está presente
    bool sdPresente = miDataLogger.inicializarSD();

    // Si la tarjeta SD se ha quitado durante la ejecución
    if (sdPresente != sdInsertada) {
        if (sdPresente) {
            // La tarjeta SD ha sido insertada nuevamente
            miDisplay.imprimir(aperturas);  // Muestra el número de aperturas en el display
            miDataLogger.escribirEnArchivo(archivo, "---- Registro de aperturas ----"); // Reabre el archivo
            sdInsertada = true;  // Actualizamos el estado de la tarjeta SD
            Serial.println("Tarjeta SD insertada.");
        } else {
            // La tarjeta SD ha sido retirada
            miDisplay.imprimir("Error SD");  // Muestra un mensaje de error en el display
            sdInsertada = false;  // Actualizamos el estado de la tarjeta SD
            Serial.println("Tarjeta SD retirada.");
        }
    }

    // Leemos el estado del pulsador
    int estadoPulsador = digitalRead(miMentorBit.PULSADOR_PULLDOWN_DIGITAL);

    // Si el pulsador es presionado (estado HIGH)
    if (estadoPulsador == HIGH) {
        // Aumentamos en 1 el número de aperturas
        aperturas++;

        // Actualizamos la cuenta en el Display de 7 segmentos
        miDisplay.imprimir(aperturas);

        // Si la tarjeta SD está presente, guardamos el número de aperturas en el archivo de la tarjeta SD
        if (sdInsertada) {
            String mensaje = String(aperturas) + " aperturas de la puerta.";
            if (miDataLogger.escribirEnArchivo(archivo, mensaje)) {
                // Si se escribe correctamente en el archivo, imprimimos en el monitor serie
                Serial.println(mensaje);
            }
        }

        // Esperamos un poco antes de volver a leer el pulsador (para evitar múltiples lecturas rápidas)
        delay(300);
    }
}

La solución sin utilizar nuestra librería no está disponible actualmente.
Vistas
10 Número de vistas
10 Vistas de miembros
0 Vistas públicas
Acciones
0 Gustos
0 No me gusta
0 Comentarios
Compartir en redes sociales
Compartir enlace
Compartir por correo

Por favor iniciar sesión para compartir esto webpage por correo.