Contenido del curso

Actividad 27

 

Registro de eventos con RTC

Imagina que estás programando un sistema que registra el accionamiento de la puerta de garaje de una comunidad de vecinos. Así, simularemos la apertura de la puerta con un pulsador, y mostraremos la hora en tiempo real en la pantalla LCD. Para registrar las aperturas, imprimiremos en la pantalla OLED el último accionamiento de la puerta.


Recuerda que, la extensión de MentorBit para mBlock (si no la has descargado, puedes hacerlo desde
el apartado Descripción de mBlock), incluye el siguiente bloque con el que podemos configurar el
RTC:


Recuerda que la extensión de MentorBit para mBlock incluye el siguiente bloque con el que podemos
controlar el RTC:


Recuerda que, al actualizar constantemente el contenido de las pantallas, puede darse que no se aprecie
con claridad. Por ello, podemos configurar un pequeño retardo, el cual nos permita actualizarlo con una
menor frecuencia.



Ten en cuenta que, al utilizar retardos, el funcionamiento de los pulsadores y dispositivos del sistema
puede verse afectado debido a la coincidencia de los tiempos de ejecución, lo que podría incluso
colapsar el programa completo. Por esta razón, se recomienda utilizar retardos pequeños para reducir
este efecto.
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 el RTC, primero debes inicializarlo y configurar la hora actual del mismo,
con el fin de disponer de una fecha y hora actualizadas. Esto se consigue con las siguientes líneas:

miMentorBitDataLogger.inicializarRTC();
miMentorBitDataLogger.ajustarHoraRTC();
miMentorBitDataLogger.ajustarHoraRTC(AÑO, MES, DIA, HORA, MINUTO, SEGUNDO);

Fíjate que, la función ajustarHoraRTC, puede invocarse de dos maneras diferentes. La primera (sin
argumentos), configura el reloj con la fecha y hora del ordenador en el momento en que el código se sube al microcontrolador. En la segunda forma, podemos pasar como argumento cualquiera de los parámetros que se indican, en el mismo orden, para configurar el reloj con dichos datos.
Recuerda que, para obtener la hora actual registrada en el RTC, puedes utilizar la siguiente función:

miMentorBitDataLogger.obtenerHoraRTC();

Esta función devuelve una cadena de carácteres (String) con el siguiente formato:

AÑO-MES-DIA
HORA:MIN:SEG
.

Recuerda que, al utilizar bloques de delays/retardos/esperas, deberás mantener presionado brevemente
el pulsador, para el correcto funcionamiento del programa:



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



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

// Declaración de instancia de la clase
MentorBit miMentorBit;
MentorBitPantallas misPantallas;
MentorBitDataLogger miDataLogger;

// Inicialización del sketch
void setup() {

    // Inicializamos y configuramos la pantalla LCD
    misPantallas.inicializarLCD();
    misPantallas.lcd.backlight();
    misPantallas.lcd.clear();

    // Mostramos un mensaje inicial por la LCD
    misPantallas.lcd.setCursor(30);
    misPantallas.lcd.print("Registro de");
    misPantallas.lcd.setCursor(31);
    misPantallas.lcd.print("eventos");

    // Inicializamos y configuramos la pantalla OLED
    misPantallas.inicializarOLED();
    misPantallas.oled.setTextColor(SSD1306_WHITE);
    misPantallas.oled.setTextSize(1);
    // Mostramos un mensaje inicial por la OLED
    misPantallas.oled.setCursor(00);
    misPantallas.oled.println("Registros");
    misPantallas.oled.display();

    // Inicalizamos el RTC
    miDataLogger.inicializarRTC();
    // Configuramos el RTC con la fecha y la hora del PC
    miDataLogger.ajustarHoraRTC();

    // Esperamos un poco antes de empezar
    delay(2000);

}

// Bucle principal del sketch
void loop() {

    // Obtenemos la fecha y hora del RTC
    String fecha_hora_actual = miDataLogger.obtenerHoraRTC();
    // Separamos la fecha del resto de la cadena
    String fecha_actual = fecha_hora_actual.substring(010);
    // Separamos la hora del resto de la cadena
    String hora_actual = fecha_hora_actual.substring(11);

    // Comprobamos que se ha accionado el pulsador
    if(digitalRead(miMentorBit.PULSADOR_PULLDOWN_DIGITAL) == HIGH) {

        // Vaciamos la pantalla OLED
        misPantallas.oled.clearDisplay();
        // Imprimimos el mensaje por defecto
        misPantallas.oled.setCursor(00);
        misPantallas.oled.println("Registros");
        // Imprimimos la hora actual
        misPantallas.oled.setCursor(2032);
        misPantallas.oled.println(hora_actual);
        // Actualizamos nuestra OLED
        misPantallas.oled.display();

    }

    // Limpiamos la pantalla LCD
    misPantallas.lcd.clear();
    // Imprimimos en la primera línea la fecha actual
    misPantallas.lcd.setCursor(30);
    misPantallas.lcd.print(fecha_actual);
    // Imprimimos en la primera línea la hora actual
    misPantallas.lcd.setCursor(41);
    misPantallas.lcd.print(hora_actual);
    // Esperamos un poco antes de continuar
    delay(200);

}

Puedes descargar la solución sin utilizar nuestra librería en el siguiente icono:

Vistas
15 Número de vistas
15 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.