Arduino (IoT): Simple Tutorial RTC: Parte II – Configurar con DS1307RTC

Arduino Honduras Santiapps Marcio Valenzuela

Tutorial RTC: Parte II – Configurar con DS1307RTC

En esta parte utilizamos una librería distinta, la DS1307RTC en lugar de la RTClib.  Primero haremos lo mismo, configurar la hora en nuestro modulo RTC.

Requisitos:

  1. Computadora (mac)
  2. Arduino UNO
  3. Modulo RTC DS1307
  4. Breadboard
  5. Arduino IDE (https://www.arduino.cc/en/Main/Software)
Arduino Tutorial Real Time Clock RTC DS1307 Santiapps Marcio Valenzuela
Arduino Tutorial Real Time Clock RTC DS1307

El código:

#include <Wire.h>
#include <Time.h>
#include <DS1307RTC.h>

const char *monthName[12] = {
 "Jan", "Feb", "Mar", "Apr", "May", "Jun",
 "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
};

tmElements_t tm;

void setup() {
 Serial.begin(9600);
 bool parse=false;
 bool config=false;

 // obtener fecha de computadora
 if (getDate(__DATE__) &amp;&amp; getTime(__TIME__)) {
 parse = true;
 // configurar la fecha y hora al rtc
 if (RTC.write(tm)) {
 config = true;
 }
 }

 Serial.begin(9600);
 while (!Serial) ; // Esperar al Arduino Serial Monitor
 delay(200);
 if (parse &amp;&amp; config) {
 Serial.print("DS1307 Hora configurada=");
 Serial.print(__TIME__);
 Serial.print(", Fecha=");
 Serial.println(__DATE__);
 } else if (parse) {
 Serial.println("DS1307 Error de Comunicacion:-{");
 Serial.println("Por favor revisar sus conexiones");
 } else {
 Serial.print("No se pudo interpretar info del compilador, Hora=\"");
 Serial.print(__TIME__);
 Serial.print("\", Fecha=\"");
 Serial.print(__DATE__);
 Serial.println("\"");
 }
}

void loop() {
}

bool getTime(const char *str)
{
 int Hour, Min, Sec;

 if (sscanf(str, "%d:%d:%d", &amp;Hour, &amp;Min, &amp;Sec) != 3) return false;
 tm.Hour = Hour;
 tm.Minute = Min;
 tm.Second = Sec;
 return true;
}

bool getDate(const char *str)
{
 char Month[12];
 int Day, Year;
 uint8_t monthIndex;

 if (sscanf(str, "%s %d %d", Month, &amp;Day, &amp;Year) != 3) return false;
 for (monthIndex = 0; monthIndex &lt; 12; monthIndex++) {
 if (strcmp(Month, monthName[monthIndex]) == 0) break;
 }
 if (monthIndex &gt;= 12) return false;
 tm.Day = Day;
 tm.Month = monthIndex + 1;
 tm.Year = CalendarYrToTm(Year);
 return true;
}

Ya tenemos a nuestra disposición 2 distintas librerías para lograr lo mismo.  Recordemos que las librerías son archivos de código que toman las instrucciones de nivel mas bajo que utilizan los modelos y sensores y los convierten en funciones y valores fáciles de entender a los humanos.

Es decir, recordemos que nuestros sensores lo único que interpretan son corrientes y los distintos tipos.  Estas corrientes se traducen a bits y bytes que producen senales binarias de 0 y 1, que son interpretadas por los distintos chips.  Las librerías hacen un interfaz a este nivel mas bajo y funcionan como traductor.  Las librerías toman los comandos que nosotros queremos enviar (medir intensidad de luz, medir gas CO, almacenar datos en SD, cual es la hora actual) y convierten esos comandos en lenguaje binario y corrientes que los electrónicos pueden entender.  Así mismo cuando los electrónicos contestan con corrientes, las convierten en lenguaje binario y luego en funciones con resultados que nosotros podamos entender.

Ok, podemos almacenar la hora en un modulo operado por su propia batería.  Esto es lo mismo que hace una computadora para almacenar la hora que siempre tiene aunque nosotros apaguemos la computadora al final del dia.

Veamos el uso que podemos darle a tener esta hora referencia para usar alarmas.

 

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s