Partage
  • Partager sur Facebook
  • Partager sur Twitter

Servo-moteur + RTC

    28 février 2018 à 16:58:53

    Bonjour

    je suis débutant sur arduino et pour mon projet de terminal je dois reussir a programmer un moteur en fonction de l'heure obtenue grave à une RTC.

    j ai trouvé un programme sur internet mais lorsque je compil l'heure est bien enregistre dans ma RTC mais lorsque je débranche ma RTC puis la rebranche l'heure se réinitialise a l'heure programmer

    comment faire pour que l heure ne se réinitilaise pas ??

    et je ne trouve pas comment faire pour réussir a programmer le moteur en fonction de l heure ... quelqu'un pourrait me mettre sur la voie ?

    merci beaucoup et voici mon code :

    #include "Wire.h"
    #define DS3231_I2C_ADDRESS 0x68
    byte decToBcd(byte val)
    {
      return( (val/10*16) + (val%10) );
    }
    byte bcdToDec(byte val)
    {
      return( (val/16*10) + (val%16) );
    }
    void setup()
    {
      Wire.begin();
      Serial.begin(9600);
      // set the initial time here:
      // DS3231 seconds, minutes, hours, day, date, month, year
     setDS3231time(30,39,16,3,28,02,18);
    }
    void setDS3231time(byte second, byte minute, byte hour, byte dayOfWeek, byte
    dayOfMonth, byte month, byte year)
    {
    
      Wire.beginTransmission(DS3231_I2C_ADDRESS);
      Wire.write(0); // set next input to start at the seconds register
      Wire.write(decToBcd(second)); // set seconds
      Wire.write(decToBcd(minute)); // set minutes
      Wire.write(decToBcd(hour)); // set hours
      Wire.write(decToBcd(dayOfWeek)); // set day of week (1=Sunday, 7=Saturday)
      Wire.write(decToBcd(dayOfMonth)); // set date (1 to 31)
      Wire.write(decToBcd(month)); // set month
      Wire.write(decToBcd(year)); // set year (0 to 99)
      Wire.endTransmission();
    }
    void readDS3231time(
    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());
      *hour = bcdToDec(Wire.read() & 0x3f);
      *dayOfWeek = bcdToDec(Wire.read());
      *dayOfMonth = bcdToDec(Wire.read());
      *month = bcdToDec(Wire.read());
      *year = bcdToDec(Wire.read());
    }
    void displayTime()
    {
      byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
      readDS3231time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month,
      &year);
      Serial.print(hour, DEC);
      Serial.print(":");
      if (minute<10)
      {
        Serial.print("0");
      }
      Serial.print(minute, DEC);
      Serial.print(":");
      if (second<10)
      {
        Serial.print("0");
      }
      Serial.print(second, DEC);
      Serial.print(" ");
      Serial.print(dayOfMonth, DEC);
      Serial.print("/");
      Serial.print(month, DEC);
      Serial.print("/");
      Serial.print(year, DEC);
      Serial.print(" Day of week: ");
      switch(dayOfWeek){
      case 1:
        Serial.println("Sunday");
        break;
      case 2:
        Serial.println("Monday");
        break;
      case 3:
        Serial.println("Tuesday");
        break;
      case 4:
        Serial.println("Wednesday");
        break;
      case 5:
        Serial.println("Thursday");
        break;
      case 6:
        Serial.println("Friday");
        break;
      case 7:
        Serial.println("Saturday");
        break;
      }
    }
    void loop()
    {
      displayTime();
      delay(1000);
    }



    • Partager sur Facebook
    • Partager sur Twitter
      1 mars 2018 à 13:54:35

      Il faut que la RTC soit alimentée pour fonctionner et maintenir l'heure.
      • Partager sur Facebook
      • Partager sur Twitter
        10 janvier 2020 à 16:44:29

        Bonjour,

        tout est expliqué dans ton code qui est bien connu, dans les lignes:

        // set the initial time here:
        // DS3231 seconds, minutes, hours, day, date, month, year
        setDS3231time(30,39,16,3,28,02,18);
        il faut comprendre que la ligne setDS3231time(30,39,16,3,28,02,18)règle l'heure du module RTC à 16h39min30s 3=3e jour de la semaine(mardi) de la date 28/02/2018.
        Il faut téléversser le code après avoir modifié cette ligne. Le module serra donc réglé à la bonne datte et heure.
        Par exemple pour le régler à vendredi 10/01/2020 à 16h27"32s il faut adapter la ligne comme ceci:

        setDS3231time(32,27,16,6,10,01,20);
        Puis téléverser le programme. Le module serra alors réglé.
        Par contre si l'alimentation de l'Arduino est coupé puis remise, l'Arduino va faire sont initialisation et rerégler l'heure à cette même heure qui n'est donc plus la bonne.
        La bonne manip est donc de téléverser le programme avec la bonne heure afin de régler le module RTC, puis de modifier le programme en mettant la ligne de réglage de l'heure en commentaire avec //. L'Arduino ne pourra donc plus modifier l'heure, même si il redémarre.
        Donc 1er téléversement:
        setDS3231time(32,27,16,6,10,01,20);
        2eme téléversement:
         // setDS3231time(32,27,16,6,10,01,20);
        La ligne est mise en commentaire et ne serra plus exécutée...
        • Partager sur Facebook
        • Partager sur Twitter

        Servo-moteur + RTC

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown