Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

Horloge à 7 segments avec Arduino Nano + DS3231 + LDR

Composants et fournitures

Arduino Nano R3
fonctionne bien avec Arduino Uno ou Elegoo Uno
× 1
Sac à dos Adafruit 7 segments - 1,2 po de haut
- 1.2" Tall Digits dans mon cas (facultatif si vous achetez le bundle)
× 1
Afficheur Adafruit 1.2 à 4 chiffres à 7 segments avec sac à dos I2C - Vert
× 1
Adafruit DS3231
ou DS1307 si vous préférez
× 1
Résistance 100k ohm
× 1
Résistance photo
× 1
Planche à pain (générique)
× 1
Câbles de raccordement (générique)
10-14 pièces
× 1
Pile bouton CR1220
× 1

Applications et services en ligne

Arduino IDE

À propos de ce projet

Présentation

À une époque où vous avez toujours une horloge au poignet, que ce soit une montre au poignet ou un smartphone, l'Arduino Uno/Nano est un peu ennuyeux. Sinon, vous avez des périphériques synchronisés avec le serveur NTP dans cet article à l'extérieur, qui sont constamment en ligne via votre connexion Internet.

Histoire

Un de mes amis a refusé pour des raisons personnelles un appareil avec connexion WiFi dans sa chambre et j'ai donc l'Arduino équipé d'une horloge séparée.

Choisissez le bon produit

J'ai été surpris du nombre de produits différents dont même Adafruit disposait :en fonction de la tension souhaitée, ainsi qu'avec des précisions différentes ! Ici j'ai opté pour deux produits :le moins cher DS1307 et le DS3231 probablement plus précis .

Pour être clair :les deux produits peuvent être utilisés dans cette horloge. Pour utiliser le DS1307, faites attention à l'attribution correcte du PIN et à la restriction de l'option d'affichage de la température :remarque "//" le displayTemp(); fonction dans la boucle().

Adapter le croquis

Je suis allé chercher un croquis et j'ai trouvé quelque chose avec un autre membre. J'ai restructuré et ajusté ce croquis, mais j'ai gardé ses commentaires tchèques et ajouté des remarques en anglais.

L'annonce était censée être aussi grande que possible et j'ai donc opté pour une annonce en 7 segments :après tout, je voulais seulement avoir le temps en tête.

La prochaine surprise positive que j'ai eue en examinant les croquis :ici, le DS3231 offre la option d'utiliser la température , que le DS1307 - en plus de son imprécision - manque.

Init les horloges

Si vous avez une pile bouton CR1220, vous pouvez suivre le court tutoriel d'Adafruit sur la configuration des horloges. En résumé, l'heure n'est pas téléchargée depuis Internet, mais au fil du temps depuis le PC local. L'horodatage du téléchargement est transféré aux minuteurs.

Fonctions

Ensuite, j'ai ajouté la matrice LED au circuit pour la sortie de temps et de température . La période de changement de temps et de température peut être réglée via des variables.

En particulier, comment le contrôle des points et des chiffres individuels - clignotants - sur la matrice LED fonctionne et est contrôlé, est bien décrit dans le croquis.

Ici, je me réfère à d'autres sources d'Adafruit.

L'esquisse est complétée par le ajustement de l'heure été/hiver et la luminosité de la matrice LED en fonction de la lumière ambiante (la nuit, l'affichage doit être plus sombre qu'à la lumière du jour).

Dans la vidéo, vous avez certainement remarqué le changement d'heure et de température. As-tu fait attention au point à gauche sur la photo ? Celui-ci change de position (haut ou bas) en fonction des secondes.

Donnez-moi un retour si vous savez comment émettre un "ERR" sur la matrice LED en cas de panne de l'horloge. Au moment où "bEEF" apparaîtra :

 // oh non, pas de données ! Serial.println ("Erreur du capteur DS3231 - impossible de lire la température"); matrice.print(0xBEEF, HEX); // informer l'utilisateur avec BEEF matrix.writeDisplay(); retard (5000); 

Agrandissement

Une alarme ou une heure d'alarme n'est pas encore intégrée non plus.

Peut-être réussit également une extension via le module Bluetooth et Blynk.

Mise à jour 01.02.2019 :

Le transfert de la maquette à un pari permanent sur une carte perforée a été achevé aujourd'hui. Quelques photos pour ceux que ça intéresse :

Vous trouverez un code mis à jour v1.1 dans la pièce jointe ainsi qu'une image de frisage personnalisée.

Code

  • MyClock v1.0
  • MyClock v1.1
MyClock v1.0C/C++
// MyClock v1.0// Ingo Lohs// Matériel :testé avec Arduino Uno et Arduino Nano (ATmega328P [Old Bootloader]) en utilisant Arduino IDE v1.8.8/* Théorie pour la matrice ht16k33Le plus simple est de simplement appeler print - comme vous le faites avec Serialprint(variable,HEX) - cela imprimera un nombre hexadécimal, de 0000 à FFFFprint(variable,DEC) ou print(variable) - cela imprimera un entier décimal, de 0000 à 9999Si vous besoin de plus de contrôle, vous pouvez appeler writeDigitNum (emplacement, numéro) - cela écrira le numéro (0-9) à un seul emplacement. L'emplacement n°0 est tout à gauche, l'emplacement n°2 correspond aux deux points, donc vous voulez l'ignorer, l'emplacement n ° 4 est complètement à droite. Pour contrôler les deux points et les points décimaux, utilisez la fonction writeDigitRaw (emplacement, bitmap). (Notez que les deux points des deux points centraux sont câblés ensemble à l'intérieur de l'écran , il n'est donc pas possible de les adresser séparément.) Spécifiez 2 pour l'emplacement et les bits sont mappés comme suit :0x02 - deux-points centraux (tous deux d ots)0x04 - côlon gauche - point inférieur0x08 - côlon gauche - point supérieur0x10 - point décimalSi vous voulez un point décimal, appelez writeDigitNum(emplacement, nombre, vrai) qui peindra le point décimal. false)Si vous voulez un contrôle total des segments dans tous les chiffres, vous pouvez appeler writeDigitRaw(location,bitmask) pour dessiner un masque 8 bits brut (tel qu'il est stocké dans un uint8_t) à n'importe quel emplacement.Toutes les routines de dessin ne changent que l'affichage mémoire conservée par l'Arduino. N'oubliez pas d'appeler writeDisplay() après le dessin pour « enregistrer » la mémoire dans la matrice via I2C.Source :https://www.mouser.com/ds/2/737/adafruit-led-backpack-932846. pdf*/#include // Activez cette ligne si vous utilisez Arduino Uno, Mega, etc.#include #include "Adafruit_LEDBackpack.h"#define DS3231_I2C_ADDRESS 0x68int ldr_sensor =A0; // Photorésistance LDR avec 100k Ohm à GND, autre jambe 5Vint ldr_value =0; // Valeur LDR - var store valueint bright_matrix; // Luminosité de la matrice LED - var store valueint threshold_brightness =400 ; // Thresholdint blinkrate_value =0; // Taux de clignotement de la matrice de LEDint delay_matrix_time =20; // combien de temps d'affichage (20 sec)int delay_matrix_temp =2000; // combien de temps afficher temp (2 sec)int blinky_dot =2; // ne clignote rien - sur le côté gauche 2 points simplesAdafruit_7segment matrix =Adafruit_7segment();byte decToBcd(byte val){return ( (val/10*16) + (val%10) );}byte bcdToDec(byte val){ return ( (val/16*10) + (val%16) );}void setup() { Serial.begin(9600); Fil.begin(); matrice.begin(0x70);}boucle vide() { lightBrightness(); // Matrix-Brightness Justierung matrixBlinkrate(); // Matrix-Blinkrate Justitierung displayTime(); // affiche les données de l'horloge en temps réel displayTemp(); // affiche la température } void lightBrightness() {// setBrightness (brighness) - vous permettra de modifier la luminosité globale de l'ensemble de l'affichage. 0 est le moins lumineux, 15 est le plus lumineux et correspond à ce qui est initialisé par l'affichage lorsque vous démarrez ldr_value =analogRead(ldr_sensor); Serial.print("LDR:"); Serial.println(ldr_value); if (ldr_value <=threshold_brightness) { // mesure de la luminosité par rapport au seuil bright_matrix =0 ; // lumineux à la lumière du jour } else { bright_matrix =15; // dark at night }}void matrixBlinkrate() {// blinkRate(rate) - Vous pouvez faire clignoter tout l'affichage. 0 ne clignote pas. 1, 2 ou 3 est pour l'affichage clignotant. matrice.blinkRate(blinkrate_value);} void displayTime(){matrix.setBrightness(brightness_matrix); matrix.clear();// combien de temps d'affichage sur la matrice en secondes pour (uint16_t i =0; i > Passage à l'heure d'été - dernier dimanche de mars à 2 heures si ((dayOfWeek ==7) &&(dayOfMonth>=25)&&(mois ==3) &&(heure ==2)) { // nastavení hodin na 3 hodinu // régler l'horloge sur 3 heures setDS3231time(se,mi,3,we,dm,mo,ye); } // změna času na zimní //>> Passer à l'heure d'hiver si ((dayOfWeek ==7) &&(dayOfMonth>=25) &&(month ==10) &&(hour ==1)&&(year !=1 )) { // rok použit jako indikace, že bylo léto // année utilisée comme indication que c'était l'été setDS3231time(se,mi,ho,we,dm,mo,1) ; } if ((dayOfWeek ==7) &&(dayOfMonth>=25) &&(month ==10) &&(hour ==3) &&(year ==1)) { // nastavení hodin na 2 hodinu a příznak na 0 // régler l'horloge sur 2 heures et marquer l'année sur 0 setDS3231time(se,mi,2,we,dm,mo,0) ; } /* Spécifiez 2 pour l'emplacement et les bits sont mappés comme suit :0x02 - deux points centraux (les deux points) 0x04 - deux points gauche - point inférieur 0x08 - deux points gauche - point supérieur 0x10 - point décimal */ /* contrôle de l'emplacement #2 aussi la gauche 2 points simples comme ceci (=blinky_dot) :2 =ne clignote rien 3 =ne clignote rien 4 =clignote en haut à gauche (seul point supérieur) 5 =clignote en haut à gauche (seul point supérieur) 6 =clignote en haut à gauche (seul point supérieur) ) + les deux deux points au milieu 7 =clignote en haut à gauche (seul point supérieur) + les deux deux points au milieu 8 =clignote en bas à gauche (seul point inférieur) 9 =clignote en bas à gauche (seul point inférieur) 10 =clignote en bas à gauche (seul point inférieur) ) + les deux deux points au milieu 11 =clignote en bas à gauche (un seul point inférieur) + les deux deux points au milieu 12 =clignote les deux points (les deux points simples à gauche) sans les deux points au milieu */ // format des heures :_0:mm si (heure> 9) { matrice.writeDigitNum(0, (heure / 10), false); matrice.writeDigitNum(1, (heure % 10), false); // cela écrira le nombre (0-9) à un seul emplacement en utilisant modulo https://www.arduino.cc/reference/en/language/structure/arithmetic-operators/modulo/ } else { matrix.writeDigitNum( 1, heure, faux); } // matrice.drawColon(true); // les deux deux points au milieu sont actifs :au cas où vous ne voudriez pas faire clignoter les points à gauche, vous pouvez activer les deux points ici // donner aux secondes une chance d'afficher les points à gauche if (se <=30) { blinky_dot =10 ; // clignote en bas à gauche (un seul point inférieur) + les deux deux points au milieu } else if (se> 30) { blinky_dot =6; // clignote en haut à gauche (un seul point supérieur) + les deux deux points au milieu } matrix.writeDigitRaw(2, blinky_dot); matrice.writeDigitNum(3, (minute / 10), false); matrice.writeDigitNum(4, (minute % 10), false); matrice.writeDisplay(); // doubles points clignotants pour un délai d'une demi-seconde (500); matrice.drawColon(false); matrice.writeDisplay(); retard (500); }}void displayTemp(){matrix.setBrightness(brightness_matrix); matrice.clear(); octet temp =get3231Temp(); int abs_temp =abs(temp); // nombre absolu d'une valeur matrix.writeDigitNum(1,(abs_temp % 10), false); // position 1, valeur 9, afficher la décimale) if (temp <0) matrix.writeDigitRaw(0,64); if (temp <=-10) matrice.writeDigitRaw(2,12); // et si la température est négative, on place le signe moins en premier. if (temp> =10) matrix.writeDigitNum(0, (abs_temp/10), false); // position 0, valeur 1, afficher la décimale) if (temp <=-10) matrice.writeDigitNum(0, (abs_temp/10), false); // position 0, valeur 1, affichage décimal) // matrice.writeDigitRaw(2,0x10); // matrice de points décimaux.writeDigitRaw(3,99) ; // 99 ="°" matrice.writeDigitRaw(4,57); // 57 =matrice "C".writeDisplay(); // affiche les valeurs de température sur la ligne série // zobrazí hodnoty teploty na seriove lince Serial.print("Temperatur in C:"); Serial.println(get3231Temp()); // +/- 3 degrés Celsius // durée d'affichage de la température sur la matrice en secondes delay (delay_matrix_temp);} void setDS3231time (octet seconde, octet minute, octet heure, octet dayOfWeek, octet dayOfMonth, octet mois, octet année){ / / définir les données d'heure et de date sur DS3231 Wire.beginTransmission(DS3231_I2C_ADDRESS); Wire.write(0); // définit l'entrée suivante pour qu'elle commence au registre des secondes Wire.write(decToBcd(second)); // définit les secondes Wire.write(decToBcd(minute)); // définit les minutes Wire.write(decToBcd(hour)); // définir les heures Wire.write(decToBcd(dayOfWeek)); // définir le jour de la semaine (1=dimanche, 7=samedi) Wire.write(decToBcd(dayOfMonth)); // fixe la date (1 à 31) Wire.write(decToBcd(month)); // définir le mois Wire.write(decToBcd(year)); // définir l'année (0 à 99) Wire.endTransmission();}void getDateDs3231(byte *second, byte *minute, byte *hour, byte *dayOfWeek, byte *dayOfMonth, byte *month, byte *year){ Wire. beginTransmission(DS3231_I2C_ADDRESS); Wire.write(0); Wire.endTransmission(); Wire.requestFrom(DS3231_I2C_ADDRESS, 7); *second =bcdToDec(Wire.read() &0x7f); *minute =bcdToDec(Wire.read()); *heure =bcdToDec(Wire.read() &0x3f); *dayOfWeek =bcdToDec(Wire.read()); *dayOfMonth =bcdToDec(Wire.read()); *mois =bcdToDec(Wire.read()); *année =bcdToDec(Wire.read());}float get3231Temp(){ octet tMSB, tLSB ; float temp3231; Wire.beginTransmission(DS3231_I2C_ADDRESS); Wire.write(0x11); Wire.endTransmission(); Wire.requestFrom(DS3231_I2C_ADDRESS, 2); if (Wire.available()) { tMSB =Wire.read(); // Int partie complément à 2 tLSB =Wire.read(); // fraction portion temp3231 =(tMSB &B01111111); // fait le calcul de 2 sur Tmsb temp3231 +=( (tLSB>> 6) * 0.25 ); // ne se soucie que des bits 7 et 8 return temp3231; } else { // oh non, pas de données ! Serial.println ("Erreur du capteur DS3231 - impossible de lire la température"); matrice.print(0xBEEF, HEX); // informer l'utilisateur avec BEEF matrix.writeDisplay(); retard (5000); } }
MyClock v1.1C/C++
Mise à jour Summer/Winter-Time
// MyClock v1.1// Ingo Lohs// Hardware :testé avec Arduino Uno et Arduino Nano (ATmega328P [Old Bootloader]) en utilisant Arduino IDE v1.8.8// Change v1.0> v1.1// dayOfWeek ==1 anstatt 7 abgeändert in displayTime() zur korrekten Ermittlung des Sonntages für die Zeitumstellung/* Théorie pour la matrice ht16k33Le plus simple est d'appeler print - comme vous le faites avec Serialprint(variable,HEX) - cela imprimera un nombre hexadécimal, de 0000 à FFFFprint (variable, DEC) ou print (variable) - cela imprimera un entier décimal, de 0000 à 9999 Si vous avez besoin de plus de contrôle, vous pouvez appeler writeDigitNum (emplacement, numéro) - cela écrira le nombre (0-9) à un seul emplacement. L'emplacement n°0 est tout à fait à gauche, l'emplacement n°2 correspond aux deux points donc vous voudrez probablement l'ignorer, l'emplacement n°4 est tout le chemin vers la droite. Pour contrôler les deux points et les points décimaux, utilisez la fonction writeDigitRaw (emplacement, bitmap). (Notez que les deux points des deux points centraux sont câblés ensemble dans externe à l'affichage, il n'est donc pas possible de les adresser séparément.) Spécifiez 2 pour l'emplacement et les bits sont mappés comme suit :0x02 - deux points centraux (les deux points) 0x04 - deux points gauche - point inférieur0x08 - deux points gauche - point supérieur0x10 - point décimalSi vous voulez un point décimal, appelez writeDigitNum(location, nombre, vrai) qui peindra le point décimal. peut appeler writeDigitRaw (emplacement, masque de bits) pour dessiner un masque 8 bits brut (tel qu'il est stocké dans un uint8_t) à n'importe quel emplacement. Toutes les routines de dessin ne modifient que la mémoire d'affichage conservée par l'Arduino. N'oubliez pas d'appeler writeDisplay() après le dessin pour « enregistrer » la mémoire dans la matrice via I2C.Source :https://www.mouser.com/ds/2/737/adafruit-led-backpack-932846. pdf*/#include  // Activez cette ligne si vous utilisez Arduino Uno, Mega, etc.#include #include "Adafruit_LEDBackpack.h"#define DS3231_I2C_ADDRESS 0x68int ldr_sensor =A0; // Photorésistance LDR avec 100k Ohm à GND, autre jambe 5Vint ldr_value =0; // Valeur LDR - var store valueint bright_matrix; // Luminosité de la matrice LED - var store valueint threshold_brightness =400 ; // Thresholdint blinkrate_value =0; // Taux de clignotement de la matrice de LEDint delay_matrix_time =20; // combien de temps d'affichage (20 sec)int delay_matrix_temp =2000; // combien de temps afficher temp (2 sec)int blinky_dot =2; // ne clignote rien - sur le côté gauche 2 points simplesAdafruit_7segment matrix =Adafruit_7segment();byte decToBcd(byte val){return ( (val/10*16) + (val%10) );}byte bcdToDec(byte val){ return ( (val/16*10) + (val%16) );}void setup() { Serial.begin(9600); Fil.begin(); matrice.begin(0x70);}boucle vide() { lightBrightness(); // Matrix-Brightness Justierung matrixBlinkrate(); // Matrix-Blinkrate Justitierung displayTime(); // affiche les données de l'horloge en temps réel displayTemp(); // affiche la température } void lightBrightness() {// setBrightness (brighness) - vous permettra de modifier la luminosité globale de l'ensemble de l'affichage. 0 est le moins lumineux, 15 est le plus lumineux et correspond à ce qui est initialisé par l'affichage lorsque vous démarrez ldr_value =analogRead(ldr_sensor); Serial.print("LDR:"); Serial.println(ldr_value); if (ldr_value <=threshold_brightness) { // mesure de la luminosité par rapport au seuil bright_matrix =0 ; // lumineux à la lumière du jour } else { bright_matrix =15; // dark at night }}void matrixBlinkrate() {// blinkRate(rate) - Vous pouvez faire clignoter tout l'affichage. 0 ne clignote pas. 1, 2 ou 3 est pour l'affichage clignotant. matrice.blinkRate(blinkrate_value);} void displayTime(){matrix.setBrightness(brightness_matrix); matrix.clear();// combien de temps d'affichage sur la matrice en secondes pour (uint16_t i =0; i > Passage à l'heure d'été - dernier dimanche de mars à 2 heures si ((dayOfWeek ==1) &&(dayOfMonth>=25)&&(mois ==3) &&(heure ==2)) { // nastavení hodin na 3 hodinu // régler l'horloge sur 3 heures setDS3231time(se,mi,3,we,dm,mo,ye); } // změna času na zimní //>> Passer à l'heure d'hiver si ((dayOfWeek ==1) &&(dayOfMonth>=25) &&(month ==10) &&(hour ==1)&&(year !=1 )) { // rok použit jako indikace, že bylo léto // année utilisée comme indication que c'était l'été setDS3231time(se,mi,ho,we,dm,mo,1) ; } if ((dayOfWeek ==1) &&(dayOfMonth>=25) &&(month ==10) &&(hour ==3) &&(year ==1)) { // nastavení hodin na 2 hodinu a příznak na 0 // régler l'horloge sur 2 heures et marquer l'année sur 0 setDS3231time(se,mi,2,we,dm,mo,0) ; } /* Spécifiez 2 pour l'emplacement et les bits sont mappés comme suit :0x02 - deux points centraux (les deux points) 0x04 - deux points gauche - point inférieur 0x08 - deux points gauche - point supérieur 0x10 - point décimal */ /* contrôle de l'emplacement #2 aussi la gauche 2 points simples comme ceci (=blinky_dot) :2 =ne clignote rien 3 =ne clignote rien 4 =clignote en haut à gauche (seul point supérieur) 5 =clignote en haut à gauche (seul point supérieur) 6 =clignote en haut à gauche (seul point supérieur) ) + les deux deux points au milieu 7 =clignote en haut à gauche (seul point supérieur) + les deux deux points au milieu 8 =clignote en bas à gauche (seul point inférieur) 9 =clignote en bas à gauche (seul point inférieur) 10 =clignote en bas à gauche (seul point inférieur) ) + les deux deux points au milieu 11 =clignote en bas à gauche (un seul point inférieur) + les deux deux points au milieu 12 =clignote les deux points (les deux points simples à gauche) sans les deux points au milieu */ // format des heures :_0:mm si (heure> 9) { matrice.writeDigitNum(0, (heure / 10), false); matrice.writeDigitNum(1, (heure % 10), false); // cela écrira le nombre (0-9) à un seul emplacement en utilisant modulo https://www.arduino.cc/reference/en/language/structure/arithmetic-operators/modulo/ } else { matrix.writeDigitNum( 1, heure, faux); } // matrice.drawColon(true); // les deux deux points au milieu sont actifs :au cas où vous ne voudriez pas faire clignoter les points à gauche, vous pouvez activer les deux points ici // donner aux secondes une chance d'afficher les points à gauche if (se <=30) { blinky_dot =10 ; // clignote en bas à gauche (un seul point inférieur) + les deux deux points au milieu } else if (se> 30) { blinky_dot =6; // clignote en haut à gauche (un seul point supérieur) + les deux deux points au milieu } matrix.writeDigitRaw(2, blinky_dot); matrice.writeDigitNum(3, (minute / 10), false); matrice.writeDigitNum(4, (minute % 10), false); matrice.writeDisplay(); // doubles points clignotants pour un délai d'une demi-seconde (500); matrice.drawColon(false); matrice.writeDisplay(); retard (500); }}void displayTemp(){matrix.setBrightness(brightness_matrix); matrice.clear(); octet temp =get3231Temp(); int abs_temp =abs(temp); // nombre absolu d'une valeur matrix.writeDigitNum(1,(abs_temp % 10), false); // position 1, valeur 9, afficher la décimale) if (temp <0) matrix.writeDigitRaw(0,64); if (temp <=-10) matrice.writeDigitRaw(2,12); // et si la température est négative, on place le signe moins en premier. if (temp>
=10) matrix.writeDigitNum(0, (abs_temp/10), false); // position 0, valeur 1, afficher la décimale) if (temp <=-10) matrice.writeDigitNum(0, (abs_temp/10), false); // position 0, valeur 1, affichage décimal) // matrice.writeDigitRaw(2,0x10); // matrice de points décimaux.writeDigitRaw(3,99) ; // 99 ="°" matrice.writeDigitRaw(4,57); // 57 =matrice "C".writeDisplay(); // affiche les valeurs de température sur la ligne série // zobrazí hodnoty teploty na seriove lince Serial.print("Temperatur in C:"); Serial.println(get3231Temp()); // +/- 3 degrés Celsius // durée d'affichage de la température sur la matrice en secondes delay (delay_matrix_temp);} void setDS3231time (octet seconde, octet minute, octet heure, octet dayOfWeek, octet dayOfMonth, octet mois, octet année){ / / définir les données d'heure et de date sur DS3231 Wire.beginTransmission(DS3231_I2C_ADDRESS); Wire.write(0); // définit l'entrée suivante pour qu'elle commence au registre des secondes Wire.write(decToBcd(second)); // définit les secondes Wire.write(decToBcd(minute)); // définit les minutes Wire.write(decToBcd(hour)); // définir les heures Wire.write(decToBcd(dayOfWeek)); // définir le jour de la semaine (1=dimanche, 7=samedi) Wire.write(decToBcd(dayOfMonth)); // fixe la date (1 à 31) Wire.write(decToBcd(month)); // définir le mois Wire.write(decToBcd(year)); // définir l'année (0 à 99) Wire.endTransmission();}void getDateDs3231(byte *second, byte *minute, byte *hour, byte *dayOfWeek, byte *dayOfMonth, byte *month, byte *year){ Wire. beginTransmission(DS3231_I2C_ADDRESS); Wire.write(0); Wire.endTransmission(); Wire.requestFrom(DS3231_I2C_ADDRESS, 7); *second =bcdToDec(Wire.read() &0x7f); *minute =bcdToDec(Wire.read()); *heure =bcdToDec(Wire.read() &0x3f); *dayOfWeek =bcdToDec(Wire.read()); *dayOfMonth =bcdToDec(Wire.read()); *mois =bcdToDec(Wire.read()); *année =bcdToDec(Wire.read());}float get3231Temp(){ octet tMSB, tLSB ; float temp3231; Wire.beginTransmission(DS3231_I2C_ADDRESS); Wire.write(0x11); Wire.endTransmission(); Wire.requestFrom(DS3231_I2C_ADDRESS, 2); if (Wire.available()) { tMSB =Wire.read(); // Int partie complément à 2 tLSB =Wire.read(); // fraction portion temp3231 =(tMSB &B01111111); // fait le calcul de 2 sur Tmsb temp3231 +=( (tLSB>> 6) * 0.25 ); // ne se soucie que des bits 7 et 8 return temp3231; } else { // oh non, pas de données ! Serial.println ("Erreur du capteur DS3231 - impossible de lire la température"); matrice.print(0xBEEF, HEX); // informer l'utilisateur avec BEEF matrix.writeDisplay(); retard (5000); } }
Github
https://github.com/ILohs/MySketches

Schémas

Chemin LDR corrigé

Processus de fabrication

  1. horloge de vision Arduino pov
  2. horloge IV9 Numitron DIY la plus simple avec Arduino
  3. Horloge murale simple utilisant Adafruit 1/4 60 Ring Neopixel
  4. Horloge Arduino avec heures de prière islamique
  5. horloge maîtresse
  6. Arduino Temp. Moniteur et horloge en temps réel avec affichage 3.2
  7. Arduino Nano :contrôler 2 moteurs pas à pas avec joystick
  8. Apple Watch Arduino
  9. Réveil simple avec DS1302 RTC