Βιβλιοθήκη Arduino για έλεγχο της ημερομηνίας και της θερμοκρασίας του ενσωματωμένου DS3231 μέσω I2C
ΕΝΗΜΕΡΩΣΗ: Επισκεφθείτε επίσης το νέο βιβλιοθήκη για διαχείριση ημερομηνίας και ώρας με τη μονάδα DS3231 RTC και το Arduino με βελτιώσεις όπως η εποχιακή ώρα.
Η λειτουργία του IC de ρολόγια πραγματικού χρόνου (RTC) πιο δημοφιλή που ελέγχονται με τη χρήση του λεωφορείο Ι2C Συνήθως μοιάζει πολύ. Εκτός από το Βιβλιοθήκη καλωδίων de Arduino απλοποιεί σημαντικά την επικοινωνία με συσκευές Σειριακή διεπαφή δύο καλωδίων (TWI), I2C, συγκεκριμένος.
Σε γενικές γραμμές, η διαδικασία αποτελείται από
-
Ξεκινήστε τις επικοινωνίες ως slave ή master (ρυθμισμένες από προεπιλογή) με τη λειτουργία Wire.begin(διεύθυνση). Εάν παραληφθεί η "διεύθυνση", οι επικοινωνίες ξεκινούν με το μC ο δάσκαλος του λεωφορείο Ι2C.
-
Ενεργοποιήστε την επικοινωνία I2C με τη συσκευή μέσω της διεύθυνσης μνήμης όπου βρίσκεται, χρησιμοποιώντας την εντολή Wire.beginTransmission(διεύθυνση).
-
Γράψτε μια παραγγελία στο λεωφορείο Ι2C για να πείτε στη συσκευή τη λειτουργία που θέλετε να εκτελέσει, χρησιμοποιώντας Wire.write(εντολή), στην οποία «σειρά» είναι ο κωδικός λειτουργίας.
-
Απενεργοποιήστε τις επικοινωνίες για να απελευθερώσετε το λεωφορείο Ι2C με λειτουργία Wire.endTransmission().
-
Ζητήστε από τη συσκευή να στείλει μια συγκεκριμένη ποσότητα δεδομένων που αντιστοιχεί στη λειτουργία που έχει ζητηθεί (σε αυτήν την περίπτωση, την ημερομηνία και την ώρα) με τη λειτουργία Wire.requestFrom(διεύθυνση, ποσό).
-
Περιμένετε μέχρι τα δεδομένα που ζητούνται με τη λειτουργία να είναι διαθέσιμα για ανάγνωση Wire.available(), το οποίο επιστρέφει τον αριθμό των δεδομένων που έχουν ήδη ληφθεί και μπορούν να διαβαστούν.
-
Διαβάστε τα δεδομένα που αποστέλλονται από τη συσκευή (το Ρολόι πραγματικού χρόνου, σε αυτήν την περίπτωση) χρησιμοποιώντας τη συνάρτηση Wire.read() όσες φορές υποδεικνύονται τα byte Wire.available() που είναι διαθέσιμα.
-
Κανονικά τα δεδομένα αποστέλλονται σε πολύ συμπαγείς μορφές, επομένως είναι πολύ πιθανό να χρειαστεί να ερμηνευτούν τα δεδομένα που λαμβάνονται με τρόπο που να αντιστοιχεί στην αναπαράσταση των δεδομένων στο πρόγραμμα που χρησιμοποιεί τη συσκευή.
Σχετικά με το DS3231 (και συμβατά της ίδιας σειράς, όπως το DS3232) και την ερμηνεία των δεδομένων, σύμφωνα με τις προδιαγραφές του ενσωματωμένου, για παράδειγμα, οι τιμές των διαφορετικών ψηφίων που αντιπροσωπεύουν το χρόνο αντιπροσωπεύονται σε δυαδική κωδικοποιημένη δεκαδική (BCD) που θα είναι πιο βολικό να εκφραστεί ως δεκαδική τιμή (α byte) για χρήση σε Arduino
Στην ίδια γραμμή, η θερμοκρασία εκφράζεται ως byte in συμπλήρωμα δύο για το ακέραιο μέρος και δύο bit για το βήμα, με ανάλυση τέταρτου της μοίρας, του δεκαδικού μέρους. Αυτές και άλλες πτυχές της αναπαράστασης δεδομένων στο ρολόι έχουν συζητηθεί εξαντλητικά στον κώδικα της βιβλιοθήκης παρακάτω. DS3231
Για να ελέγξετε τη θερμοκρασία με αυτήν τη βιβλιοθήκη, απλώς χρησιμοποιήστε τη μέθοδο read_temperature() του αντικειμένου DS3231 που παρουσιάστηκε στην αρχή. Για να διαβάσετε την ημερομηνία και την ώρα, πρώτα φορτώνονται και κατόπιν ζητούνται σε μία από τις μορφές (συμπαγής, ανθρώπινη...) που είναι διαθέσιμες για διαφορετικές χρήσεις, που τεκμηριώνονται στο έγγραφο κεφαλίδας της βιβλιοθήκης κωδικών παρακάτω.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | //DS3231.h #if defined(ARDUINO) && ARDUINO>=100 #include “Arduino.h” #else #include “WProgram.h” #endif #include <Wire.h> #define TEMPERATURA_MAXIMA_DS3231 85.0 // Máxima temperatura que se puede medir con un DS3231 (70 grados en la versión comercial / no-industrial) #define TEMPERATURA_MINIMA_DS3231 -40.0 // Mínima temperatura que se puede medir con un DS3231 (0 grados en la versión comercial / no-industrial) #define DIRECCION_DS3231 B1101000 // Según datasheet #define TIMEOUT_I2C_DS3231 200 // Máximo tiempo de espera del bus I2C del DS3231 #define NUMERO_ELEMENTOS_FECHA 7 // Número de elementos (un byte por elemento) que tiene la matriz con los datos de la fecha #define NUMERO_BYTES_TEMPERATURA 2 // Número de bytes con los que se representa la temperatura (uno para la parte entera y el signo y otro para la parte decimal representada con una resolución de 0.25 grados) #define RESOLUCION_DECIMALES_DS3231 0.25 // Grados de cada paso de la parte decimal #define ROTACION_DECIMALES 6 // Rotación necesaria hasta llegar a los bits que contienen la parte que representa los decimales de la temperatura (rotar 6 corresponde a atender a los bits 7 y 8) #define MASCARA_DECIMALES B11000000 // Máscara para eliminar con una operación and la parte no significativa. En el caso el DS3231 no hace nada ya que al rotar queda sólo la parte relevante. class DS3231 { private: char valor_fecha_hora_DS3231[7]; // Matriz de valores numéricos (7 char) de la fecha y la hora. El índice 0 representa los segundos, el 1 los minutos, el 2 las horas (en formato de 24), el 3 el día de la semana empezando en el domingo que es 1, el 4 el día del mes, el 5 el número del mes y el 6 los dos últimos dígitos del año char hora_humana_DS3231[11]; // Hora en el formato hh:mm:ss siendo hh la hora (en formato de 24) representada con 2 dígitos, mm los minutos con 2 dígitos y ss los segundos con 2 dígitos char fecha_humana_DS3231[11]; // Fecha en formato DD/MM/AAAA siendo DD el día representado con 2 dígitos, MM el mes con 2 dígitos y AAAA el año con 4 dígitos char fecha_hora_MySQL_DS3231[20]; // Fecha en formato AAAA-MM-DD hh:mm:ss (estilo MySQL) siendo AAAA el año representado con 4 dígitos, MM el mes con 2 dígitos, DD el día con 2 dígitos, hh la hora (en formato de 24) con 2 dígitos, mm los minutos con 2 dígitos y ss los segundos con 2 dígitos char fecha_hora_compacta_DS3231[13]; // Fecha en formato compacto (como la anterior pero sin adornos y dos dígitos para el año) para escribir en log y en bases de datos char bcd_a_decimal(char bcd); // Convertir de BCD a decimal char decimal_a_bcd(char decimal); // Convertir de decimal a BCD protected: public: DS3231(); ~DS3231(); void cargar_fecha_hora(); void grabar_fecha_hora(char *fecha); char *valor_fecha_hora(); char *hora_humana(); // Hora en el formato hh:mm:ss siendo hh la hora (en formato de 24) representada con 2 dígitos, mm los minutos con 2 dígitos y ss los segundos con 2 dígitos unsigned int reloj_4_digitos_7_segmentos(); // La hora tal como la esperan la mayoría de relojes de cuatro dígitos LED de 7 segmentos char *fecha_humana(); // Fecha en formato DD/MM/AAAA siendo DD el día representado con 2 dígitos, MM el mes con 2 dígitos y AAAA el año con 4 dígitos char numero_dia_semana(); // Eso y empezando en domingo que es el 1 char *fecha_hora_MySQL(); // Fecha en formato AAAA-MM-DD hh:mm:ss (estilo MySQL) siendo AAAA el año representado con 4 dígitos, MM el mes con 2 dígitos, DD el día con 2 dígitos, hh la hora (en formato de 24) con 2 dígitos, mm los minutos con 2 dígitos y ss los segundos con 2 dígitos char *fecha_hora_compacta(); // Fecha en formato compacto (como la anterior pero sin adornos y dos dígitos para el año) para escribir en log y en bases de datos double leer_temperatura(); double temperatura_minima(); double temperatura_maxima(); }; |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 | //DS3231.cpp #include “DS3231.h” DS3231::DS3231() { //Wire.begin(); // Dependiendo de la versión del IDE puede ser maestro por defecto o no y habrá que activar en la librería o en la aplicación que la use (en el ejemplo se activa desde la aplicación, lo que permite un uso más genérico) } DS3231::~DS3231() { } void DS3231::cargar_fecha_hora() { unsigned long timeout_i2c; byte contador; Wire.beginTransmission(DIRECCION_DS3231); // Comunicar con el DS3231 en la dirección correspondiente Wire.write(0x00); // pedir registros desde la primera dirección Wire.endTransmission(); // Liberar el bus I2C Wire.requestFrom(DIRECCION_DS3231,NUMERO_ELEMENTOS_FECHA); // esperar NUMERO_ELEMENTOS_FECHA bytes timeout_i2c=millis()+TIMEOUT_I2C_DS3231; while(Wire.available()<NUMERO_ELEMENTOS_FECHA&&millis()<timeout_i2c){} // Esperar a que lleguen los datos o a que pase el tiempo mínimo de espera // Para usar sin espera: if(Wire.available()) for(contador=0;contador<NUMERO_ELEMENTOS_FECHA;contador++) { valor_fecha_hora_DS3231[contador]= Wire.read(); // Leer todos los datos sin discriminar aunque luego tendrán distinto tratamiento } valor_fecha_hora_DS3231[0]=bcd_a_decimal(valor_fecha_hora_DS3231[0]); // segundos en BCD valor_fecha_hora_DS3231[1]=bcd_a_decimal(valor_fecha_hora_DS3231[1]); // minutos en BCD valor_fecha_hora_DS3231[2]=((valor_fecha_hora_DS3231[2]&B00110000)>>4)*10+(valor_fecha_hora_DS3231[2]&B00001111); // BCD en modo de 24 horas valor_fecha_hora_DS3231[3]=valor_fecha_hora_DS3231[3]&B00000111; // Número de día de la semana empezando en 1 que es domingo valor_fecha_hora_DS3231[4]=((valor_fecha_hora_DS3231[4]&B00110000)>>4)*10+(valor_fecha_hora_DS3231[4]&B00001111); // Número del día del mes valor_fecha_hora_DS3231[5]=((valor_fecha_hora_DS3231[5]&B00010000)>>4)*10+(valor_fecha_hora_DS3231[5]&B00001111); // Número de mes (sin MSB) valor_fecha_hora_DS3231[6]=bcd_a_decimal(valor_fecha_hora_DS3231[6]); // Año en BCD (dos últimos dígitos) } char *DS3231::valor_fecha_hora() { //cargar_fecha_hora(); return valor_fecha_hora_DS3231; } char *DS3231::hora_humana() { //cargar_fecha_hora(); sprintf ( hora_humana_DS3231, “%02d:%02d:%02d”, valor_fecha_hora_DS3231[2], valor_fecha_hora_DS3231[1], valor_fecha_hora_DS3231[0] ); return hora_humana_DS3231; } unsigned int DS3231::reloj_4_digitos_7_segmentos() { //cargar_fecha_hora(); return (int)valor_fecha_hora_DS3231[2]*100+(int)valor_fecha_hora_DS3231[1]; } char *DS3231::fecha_humana() { //cargar_fecha_hora(); sprintf ( fecha_humana_DS3231, “%02d/%02d/20%02d”, // Formato de fecha y hora estilo español ¡Olé! valor_fecha_hora_DS3231[4], valor_fecha_hora_DS3231[5], valor_fecha_hora_DS3231[6] ); return fecha_humana_DS3231; } char DS3231::numero_dia_semana() { //cargar_fecha_hora(); return valor_fecha_hora_DS3231[3]; } char *DS3231::fecha_hora_compacta() { //cargar_fecha_hora(); sprintf ( fecha_hora_compacta_DS3231, “%02d%02d%02d%02d%02d%02d”, // Formato de fecha y hora compacta para log y base de datos valor_fecha_hora_DS3231[6], valor_fecha_hora_DS3231[5], valor_fecha_hora_DS3231[4], valor_fecha_hora_DS3231[2], valor_fecha_hora_DS3231[1], valor_fecha_hora_DS3231[0] ); return fecha_hora_compacta_DS3231; } char *DS3231::fecha_hora_MySQL() { //cargar_fecha_hora(); sprintf ( fecha_hora_MySQL_DS3231, “20%02d-%02d-%02d %02d:%02d:%02d”, // Formato de fecha y hora estilo MySQL valor_fecha_hora_DS3231[6], valor_fecha_hora_DS3231[5], valor_fecha_hora_DS3231[4], valor_fecha_hora_DS3231[2], valor_fecha_hora_DS3231[1], valor_fecha_hora_DS3231[0] ); return fecha_hora_MySQL_DS3231; } void DS3231::grabar_fecha_hora(char *fecha) { byte contador; Wire.beginTransmission(DIRECCION_DS3231); // Comunicar con el DS3231 en la dirección correspondiente Wire.write(0x00); // Empezar el envío en la primera dirección for(contador=0;contador<NUMERO_ELEMENTOS_FECHA;contador++) { Wire.write(decimal_a_bcd(fecha[contador])); // Escribir cada valor expresándolo en BCD } Wire.endTransmission(); // Liberar el bus I2C } double DS3231::leer_temperatura() { byte msb; // El byte más significativo contiene la parte entera de la temperatura (en complemento a 2 para poder representar temperaturas bajo cero) byte lsb; // El byte menos significatico contiene la parte decimal con una resolución de un cuarto de grado float temperatura=TEMPERATURA_MAXIMA_DS3231+1.0; // Un número mayor que el máximo como aviso de que algo va mal boolean negativo=false; // Inicialmente se considera postivo unsigned long timeout_i2c; Wire.beginTransmission(DIRECCION_DS3231); // Preparar el dispositivo Wire.write(0x11); // Solicitar temperatura (empieza en 11h y termina en 12h) Wire.endTransmission(); Wire.requestFrom(DIRECCION_DS3231,NUMERO_BYTES_TEMPERATURA); // Esperar temperatura: pedir dos bytes en la dirección del integrado timeout_i2c=millis()+TIMEOUT_I2C_DS3231; while(Wire.available()<NUMERO_BYTES_TEMPERATURA&&millis()<timeout_i2c){}// Esperar a que lleguen los datos o pase el tiempo de espera máximo // Para usar sin espera: if(Wire.available()) msb=Wire.read(); // parte entera con signo en complemento a dos lsb=Wire.read(); // parte fraccional con resolución de 0.25 grados negativo=msb>B01111111; // Es negativo si el primer dígito es uno temperatura=msb&B01111111; // revertir complemento a dos temperatura+=((lsb&MASCARA_DECIMALES)>>ROTACION_DECIMALES)*RESOLUCION_DECIMALES_DS3231; // atender sólo a los bits que contienen la parte decimal (7 y 8), multiplicar por el paso de la resolución y sumar a la parte entera de la temperatura if(negativo) { temperatura*=–1; // Cambiar el signo } return temperatura; } double DS3231::temperatura_minima() { return TEMPERATURA_MINIMA_DS3231; } double DS3231::temperatura_maxima() { return TEMPERATURA_MAXIMA_DS3231; } char DS3231::bcd_a_decimal(char bcd) // Convertir de BCD a decimal { return ((bcd&B11110000)>>4)*10+(bcd&B00001111); } char DS3231::decimal_a_bcd(char decimal) // Convertir de decimal a BCD { return decimal/10*16+(decimal%10); } |
Το παρακάτω είναι παράδειγμα κώδικα για να δείξει πώς να χρησιμοποιήσετε τη βιβλιοθήκη. Όπως αναφέρθηκε παραπάνω, η θερμοκρασία διαβάζεται απλά με τη συνάρτηση
του αντικειμένου κλάσης αλλά, για να αγνοηθούν σφάλματα στην ανάγνωση, χρησιμοποιούνται δύο σταθερές που αποθηκεύουν, αντίστοιχα, τη μέγιστη και την ελάχιστη θερμοκρασία της συσκευής σύμφωνα με το φύλλο δεδομένων και οι οποίες διαβάζονται με τις αντίστοιχες συναρτήσεις.Η μέτρηση της θερμοκρασίας πραγματοποιείται σε δύο στάδια: πρώτον φορτώνεται η τιμή, έτσι ώστε διαφορετικές χρήσεις της ημερομηνίας ή της ώρας να είναι συνεπείς (δεν θα εμφανίζουν υψηλότερη τιμή σε δυσμενείς περιπτώσεις) και δεύτερον χρησιμοποιείται σύμφωνα με τη μορφή που απατείται. Το παράδειγμα προγράμματος (το οποίο δεν είναι πολύ πρακτικό, αν και εξηγεί όλες τις δυνατότητες) δείχνει όλες τις διαθέσιμες μορφές
-
Η λειτουργία δεξαμενή (bytes) που περιέχουν τις επτά αριθμητικές τιμές που αντιπροσωπεύουν την ημερομηνία και την ώρα σε ένα ρολόι DS3231 μετατρέπονται σε δεκαδικά (είναι μέσα BCD στη συσκευή)
που επιστρέφει έναν δείκτη σε έναν πίνακα -
Χρησιμοποιώντας τη λειτουργία
Λαμβάνεται μια τιμή που αντιστοιχεί στον αριθμό της ημέρας της εβδομάδας που ξεκινά την Κυριακή. Για να εμφανιστεί ως κείμενο, χρησιμοποιείται ένας πίνακας και αφαιρείται ένας για να ξεκινήσει από το μηδέν δείκτη, Κυριακή. -
Για να συμβουλευτείτε την ημερομηνία σε "τοπική" (ισπανική) μορφή, χρησιμοποιήστε τη συνάρτηση
, το οποίο επιστρέφει έναν δείκτη σε μια συμβολοσειρά στην οποία η ημερομηνία αναπαρίσταται σε μορφή ΗΗ/ΜΜ/ΕΕΕΕ, όπου ΗΗ είναι η ημέρα που αντιπροσωπεύεται με 2 ψηφία, ΜΜ είναι ο μήνας με 2 ψηφία και ΕΕΕΕ είναι το έτος με 4 ψηφία. -
Η λειτουργία
επιστρέφει την ώρα στη μορφή ωω:λλ:δδ, με ωω να είναι η ώρα (σε μορφή 24) που αντιπροσωπεύεται με 2 ψηφία, mm τα λεπτά με 2 ψηφία και ss τα δευτερόλεπτα με 2 ψηφία. -
Για εύκολη χρήση της ημερομηνίας και της ώρας αρχεία καταγραφής η λειτουργία έχει προγραμματιστεί , που αποδίδει την τιμή της ημερομηνίας και της ώρας με τη μορφή YYMMDDhhmmss όπου AA είναι το έτος που αντιπροσωπεύεται με τα 2 τελευταία ψηφία, MM είναι ο μήνας με 2 ψηφία, DD είναι η ημέρα με 2 ψηφία, hh είναι η ώρα (σε μορφή 24 ) με 2 ψηφία, mm τα λεπτά με 2 ψηφία και ss τα δευτερόλεπτα με 2 ψηφία. Αυτή η μορφή, παρόλο που είναι κείμενο, καταλαμβάνει λίγο χώρο και επιτρέπει πολύ απλή αλφαβητική σειρά.
-
Η λειτουργία MySQL (ή το νέο και πιο ελεύθερο MariaDB) ΕΕΕΕ-ΜΜ-ΗΗ ωω:λλ:δδ, όπου ΕΕΕΕ είναι το έτος που αντιπροσωπεύεται με 4 ψηφία, ΜΜ είναι ο μήνας με 2 ψηφία, ΗΗ είναι η ημέρα με 2 ψηφία, ωω είναι η ώρα (σε μορφή 24) με 2 ψηφία , mm είναι τα λεπτά με 2 ψηφία και δευτερόλεπτα με 2 ψηφία.
χρησιμεύει για την παρουσίαση της ημερομηνίας και της ώρας στη μορφή που χρησιμοποιεί ο διαχειριστής της βάσης δεδομένων
Αν και υπάρχουν πολλές μορφές με τις οποίες μπορείτε να αναπαραστήσετε την ημερομηνία και την ώρα, αυτή που χρειάζεστε μπορεί να μην υπάρχει, αλλά σίγουρα με βάση μία από τις υπάρχουσες και χρησιμοποιώντας την ως παράδειγμα, θα είναι εύκολο να προσθέσετε μια νέα μέθοδο σύμφωνα με άλλες προδιαγραφές. Παρακαλώ, αν προσθέσετε νέες λειτουργίες, κοινοποιήστε τον κώδικα (απελευθέρωσέ τον!) και εξήγησέ μας πώς λειτουργεί, ώστε να κάνουμε τη βιβλιοθήκη καλύτερη σιγά σιγά. Ευχαριστούμε!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | #define INTERVALO_MEDICION 100000 // Medir temperatura cada 100 segundos (se renueva internamente en el DS3231 cada 64 segundos) #define ESPERA_ERROR 1000 // Tiempo de espera antes de volver a medir si se ha producido un error #define ELEMENTOS_MATRIZ_FECHA 7 #include “DS3231.h” #include <Wire.h> char buffer_fecha[ELEMENTOS_MATRIZ_FECHA]; char *puntero_fecha; float temperatura; unsigned long cronometro; byte contador; String dia_semana[]={“lunes”,“martes”,“miércoles”,“jueves”,“viernes”,“sábado”,“domingo”}; DS3231 reloj; void setup() { Serial.begin(9600); Wire.begin(); // Inicializar Wire sólo si no se hace dentro del constructor (de la librería) Este método, hacerlo en la aplicación, supone que se usa Wire para comunicar con otros dispositivos, no sólo con el DS3231 cronometro=0; // para que empiece inmediatamente } void loop() { if(millis()>cronometro) { temperatura=reloj.leer_temperatura(); if(temperatura>reloj.temperatura_maxima()||temperatura<reloj.temperatura_minima()) { cronometro=millis()+ESPERA_ERROR; } else { cronometro=millis()+INTERVALO_MEDICION; reloj.cargar_fecha_hora(); puntero_fecha=reloj.valor_fecha_hora(); for(contador=0;contador<ELEMENTOS_MATRIZ_FECHA;contador++) { buffer_fecha[contador]=*(puntero_fecha+contador); Serial.println(“Contenido de la posición “+String(contador,DEC)+” del buffer de la fecha -> “+String(int(buffer_fecha[contador]),DEC)); } Serial.print(“El día “); Serial.print(reloj.fecha_humana()); Serial.print(“, “); Serial.print(dia_semana[reloj.numero_dia_semana()–1]); Serial.print(“, a las “); Serial.println(reloj.hora_humana()); Serial.print(“(“); Serial.print(reloj.reloj_4_digitos_7_segmentos()); Serial.print(” en un reloj de 4 dígitos y “); Serial.print(reloj.fecha_hora_MySQL()); Serial.print(” según MySQL o “); Serial.print(reloj.fecha_hora_compacta()); Serial.println(” abreviadamente)”); Serial.print(“la temperatura era de “); Serial.print(temperatura); // Mostrar la temperatura Serial.println(” grados centígrados”); } } } |
Η έξοδος του παραπάνω παραδείγματος προγράμματος θα μπορούσε να είναι κάτι σαν αυτό που φαίνεται στην παρακάτω εικόνα: μια λίστα με 7 τιμές (δευτερόλεπτα, λεπτά, ώρα, ημέρα της εβδομάδας, ημέρα του μήνα, μήνας και έτος) την ημερομηνία και η ώρα που εκφράζεται με «ανθρώπινο» τρόπο (σύμφωνα με το ισπανικό στυλ) η ώρα ως ακέραιος αριθμός σε μορφή τετραψήφιου ρολογιού, η ημερομηνία και η ώρα σε μορφή βάσης δεδομένων MySQL, ημερομηνία και ώρα σε συμπαγή μορφή (για κορμούς) και την εσωτερική θερμοκρασία του DS3231.
Δημοσίευση σχολίου