aide pour modifier le code d'une horloge RTC

Salut

j’ai réussi (avec beaucoup de difficulté) a faire fonctionner cette superbe horloge … j’aimerais effectuer des modifications légère sur le code :

1- ajouter deux boutons poussoir afin de modifier manuellement l’heure et les minutes
2- utiliser une résistance variable (de type photorésistance) afin de diminuer la luminosité automatiquement en absence de lumière
3- le temps d’affichage du temps j’aimerais bien qu’il soit beaucoup plus long que celui de l’affichage de la température et de l’humidité …

si vous pouvez m’aider … je débute sous arduino

Merci

hello
en debut de loop, tu trouveras la ligne:
void loop() {

ti = millis(); // Initial time for the Timer of Hour/Time

while ((millis() - ti) < 3000) { //Timer of 3 seconds to show the Hour

tu changes 3000 par 6000 et tu auras un affichage de l’heure qui dureras 6 secondes

plus loin dans le code, tu verras 2 fois al meme ligne . une pour la température et une pour le % d’humidité.

la valeur correspond à des millisecondes.

Merci l'ami ... marche impec

j'ai par contre un problème avec le temps de pause entre les affichages ... la commande c'est normalement : delay(500); ... présente 3 fois : entre affichage de l'heure et de la température .. entre température et humidité .. et entre humidité et heure .. je la change par delay(100); ... ca n'a pas d'effet pour le temps de pause entre heure et température .. ni pour le temps de pause entre température et humidité .. par contre marche OK pour le temps de pause entre humidité et heure

bizarre non ?

et si tu mets 2000 ?

2000 .. oui ca marche ... 200 non ... enfin seulement le dernier delay marche pas les deux autres

j'ai supprimer la ligne delay ... il reste qd même un temps de pause pour le passage entre l'affichage de l'heure et de la température .. et entre la température et humidité .. mais pas pour la dernière entre humidité et heure ..

je ne sais pas pourquoi le programme ne fonctionne correctement que pour cette dernière !!!!

Postez le code ici - en utilisant les tags de code - trop compliqué depuis un smartphone d'aller télécharger le source

hello JML, voici le code de notre ami

/*                        Digital Clock
     Digital Clock with LED Display - 4 Digits x 7 Segments
       Display Time, Temperature and Relative Humidity
                        V1.2 - 17.Jun.2017

 *** Notes of revision V1.1 ***
     - Translated the remarks/comments into English
     - Added optional statements to show the Temperature in Fahrenheit Degrees (ºF)

 *** Notes of revision V1.2 ***
    - Updated DHT library to use Adafruit Unified Sensor
    - DHT_sensor_library

*/

#include <Time.h>        //Time Library
#include <DS1307RTC.h>   //Real Time Clock Library
#include <Wire.h>        //Auxiliary Library for DS1307RTC (Real-Time Clock) - Pins to Arduino UNO: A4 (SDA), A5 (SCL)

#include <DHT.h>          //Temperature and Humidity Library
#define DHTPIN 11         //Sensor DHT11 conected to the pin 11 on Arduino

// Definition of what DHT sensor type you are using

#define DHTTYPE DHT11   // DHT 11
//#define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321
//#define DHTTYPE DHT21   // DHT 21 (AM2301)

DHT dht(DHTPIN, DHTTYPE);

int clockPin = 8; // Pin 8 of Arduino connected in the pin 11 of 74HC595 (Clock)
int latchPin = 9; // Pin 9 of Arduino connected in the pin 12 of 74HC595 (Latch)
int dataPin = 10; // Pin 10 of Arduino connected in the pin 14 of 74HC595 (Data)

int hora, minuto, temp, umid;
int unidadeHora, unidadeMinuto, dezenaHora, dezenaMinuto;
int unidadeTemp, dezenaTemp, unidadeUmid, dezenaUmid;
unsigned long ti;

//Digits Matrix - 0 a 9
byte num[] = {
  B01111110, // Zero
  B00110000, // One
  B01101101, // Two
  B01111001, // Three
  B00110011, // Four
  B01011011, // Five
  B01011111, // Six
  B01110000, // Seven
  B01111111, // Eight
  B01111011, // Nine
};


void setup() {

  pinMode(latchPin, OUTPUT); // Define the 3 digital pins as output
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);

  dht.begin();

  setSyncProvider(RTC.get);   // Update the time with data of RTC (Real Time Clock)

  //setTime(15, 05, 00, 13, 02, 2016);

}


void loop() {

  ti = millis(); // Initial time for the Timer of Hour/Time

  while ((millis() - ti) < 3000) { //Timer of 3 seconds to show the Hour

    hora = hour();
    minuto = minute();
    unidadeHora = hora % 10;
    dezenaHora = hora / 10;
    unidadeMinuto = minuto % 10;
    dezenaMinuto = minuto / 10;

    digitalWrite(latchPin, LOW);
    shiftOut(dataPin, clockPin, LSBFIRST, 8);                  //Set DISPLAY 1 (top view from left to right)
    shiftOut(dataPin, clockPin, LSBFIRST, ~num[dezenaHora]);   //Set the Hour (ten)
    digitalWrite(latchPin, HIGH);

    digitalWrite(latchPin, LOW);
    shiftOut(dataPin, clockPin, LSBFIRST, 4);                  //Set DISPLAY 2
    shiftOut(dataPin, clockPin, LSBFIRST, ~num[unidadeHora]);  //Set the Hour (unit)
    digitalWrite(latchPin, HIGH);

    digitalWrite(latchPin, LOW);
    shiftOut(dataPin, clockPin, LSBFIRST, 2);                  //Set DISPLAY 3
    shiftOut(dataPin, clockPin, LSBFIRST, ~num[dezenaMinuto]); //Set the Minute (ten)
    digitalWrite(latchPin, HIGH);

    digitalWrite(latchPin, LOW);
    shiftOut(dataPin, clockPin, LSBFIRST, 1);                   //Set DISPLAY 4
    shiftOut(dataPin, clockPin, LSBFIRST, ~num[unidadeMinuto]); //Set the Minute (unit)
    digitalWrite(latchPin, HIGH);

    digitalWrite(latchPin, LOW);
    shiftOut(dataPin, clockPin, LSBFIRST, 4);                  //Set LED of dots
    shiftOut(dataPin, clockPin, LSBFIRST, ~B10000000);         //Set LEDs of colon (two points)
    digitalWrite(latchPin, HIGH);

    digitalWrite(latchPin, LOW);
    shiftOut(dataPin, clockPin, LSBFIRST, 1);                  //Set DISPLAY 4
    shiftOut(dataPin, clockPin, LSBFIRST, 255);                //Reset the DISPLAY 4 (to avoid some flicking)
    digitalWrite(latchPin, HIGH);
  }
  delay(500);  //Wait for half second before go ahead to show the next feature

  ti = millis(); //Initial time for the Timer of Temperature

  temp = dht.readTemperature();   //Reading the Temperature in Celsius degree (ºC)

  //Optional Temperature in Fahrenheit (ºF). Remove the comments ("//") of following statement before use it.
  //temp=dht.readTemperature(true);

  while ((millis() - ti) < 3000) { //Timer of 3 seconds for the Temperature

    unidadeTemp = temp % 10;
    dezenaTemp = temp / 10;

    digitalWrite(latchPin, LOW);
    shiftOut(dataPin, clockPin, LSBFIRST, 8);                  //Set DISPLAY 1 (top view from left to right)
    shiftOut(dataPin, clockPin, LSBFIRST, ~num[dezenaTemp]);   //Set the Temperature (ten)
    digitalWrite(latchPin, HIGH);

    digitalWrite(latchPin, LOW);
    shiftOut(dataPin, clockPin, LSBFIRST, 4);                  //Set DISPLAY 2
    shiftOut(dataPin, clockPin, LSBFIRST, ~num[unidadeTemp]);  //Set the Temperature (unit)
    digitalWrite(latchPin, HIGH);

    digitalWrite(latchPin, LOW);
    shiftOut(dataPin, clockPin, LSBFIRST, 2);                  //Set DISPLAY 3
    shiftOut(dataPin, clockPin, LSBFIRST, ~B01100011);         //Set the degree symbol [º]
    digitalWrite(latchPin, HIGH);

    //Show the symbol of Celsius degrees (ºC)
    //Set the following statements as comments with "//" to show the Temperature in Fahrenheit (ºF)
    digitalWrite(latchPin, LOW);
    shiftOut(dataPin, clockPin, LSBFIRST, 1);                  //Set DISPLAY 4
    shiftOut(dataPin, clockPin, LSBFIRST, ~B01001110);         //Set the symbol of Celsius [C]
    digitalWrite(latchPin, HIGH);

    //Show the symbol of Fahrenheit degrees (ºF)
    //Remove the indication of comments "//" on following statements to show the Temperature in Fahrenheit (ºF)
    //digitalWrite(latchPin, LOW);
    //shiftOut(dataPin, clockPin, LSBFIRST, 1);                 //Set DISPLAY 4
    //shiftOut(dataPin, clockPin, LSBFIRST, ~B01000111);        //Set the symbol of Fahrenheit [F]
    //digitalWrite(latchPin, HIGH);

    digitalWrite(latchPin, LOW);
    shiftOut(dataPin, clockPin, LSBFIRST, 1);                   //Set DISPLAY 4
    shiftOut(dataPin, clockPin, LSBFIRST, 255);                 //Reset the DISPLAY 4 (to avoid some flicking)
    digitalWrite(latchPin, HIGH);
  }
  delay(500);  //Wait for half second before go ahead to show the next feature

  ti = millis(); //Initial time for the Timer of Humidity

  umid = dht.readHumidity();    //Reading the Humidity

  while ((millis() - ti) < 3000) { //Timer of 3 seconds for the Humidity

    unidadeUmid = umid % 10;
    dezenaUmid = umid / 10;

    digitalWrite(latchPin, LOW);
    shiftOut(dataPin, clockPin, LSBFIRST, 8);                  //Set DISPLAY 1
    shiftOut(dataPin, clockPin, LSBFIRST, ~num[dezenaUmid]);   //Set the Humidity (ten)
    digitalWrite(latchPin, HIGH);

    digitalWrite(latchPin, LOW);
    shiftOut(dataPin, clockPin, LSBFIRST, 4);                  //Set DISPLAY 2
    shiftOut(dataPin, clockPin, LSBFIRST, ~num[unidadeUmid]);  //Set the Humidity (unit)
    digitalWrite(latchPin, HIGH);

    digitalWrite(latchPin, LOW);
    shiftOut(dataPin, clockPin, LSBFIRST, 2);                  //Set DISPLAY 3
    shiftOut(dataPin, clockPin, LSBFIRST, ~B01100011);         //Set the upper symbol of percentage [%] of Humidity
    digitalWrite(latchPin, HIGH);

    digitalWrite(latchPin, LOW);
    shiftOut(dataPin, clockPin, LSBFIRST, 1);                  //Set DISPLAY 4
    shiftOut(dataPin, clockPin, LSBFIRST, ~B00011101);         //Set the lower symbol of percentage [%] of Humidity
    digitalWrite(latchPin, HIGH);

    digitalWrite(latchPin, LOW);
    shiftOut(dataPin, clockPin, LSBFIRST, 1);                  //Set Display 4
    shiftOut(dataPin, clockPin, LSBFIRST, 255);                //Reset the DISPLAY 4 (to avoid some flicking)
    digitalWrite(latchPin, HIGH);
  }
  delay(500);  //Wait for half second before to restart

}

Ok c'est parce que lire la T° ou l'humidité avec ce composant prend jusqu'à 250ms et la valeur peut être "vieille" de 2 secondes - faudrait voir exactement la librairie DHT choisie (il y en a plusieurs) et ce qu'ils y font

oué c'est exactement ca ... il y a 250 ms obligatoire ... bon ... pas grave

Merci a vous tous ... ca marche impec :)