Choix lib RTC

A toutes fins utiles, voici un exemple ultra minimal d'accès en lecture/écriture à un RTC.

const uint8_t adresseRTC = 0x68; //Adresse du circuit RTC sur le bus I2C

uint8_t bin2dcb(uint8_t bin) {return bin + 6 * (bin / 10);} //conversion binaire en dcb
uint8_t dcb2bin(uint8_t dcb) {return dcb - 6 * (dcb >> 4);} //conversion dcb en binaire

bool ecrireRTC(uint8_t annee, uint8_t mois, uint8_t jour, uint8_t heure, uint8_t minute, uint8_t seconde)
{
  Wire.beginTransmission(adresseRTC);
  Wire.write((uint8_t)0);
  Wire.write(bin2dcb(seconde));
  Wire.write(bin2dcb(minute));
  Wire.write(bin2dcb(heure));
  Wire.write(1); //joursem non géré
  Wire.write(bin2dcb(jour));
  Wire.write(bin2dcb(mois));
  Wire.write(bin2dcb(annee));
  return (Wire.endTransmission() == 0); //retourne true si transmission ok
}

bool lireRTC(uint8_t *annee, uint8_t *mois, uint8_t *jour, uint8_t *heure, uint8_t *minute, uint8_t *seconde)
{
  Wire.beginTransmission(adresseRTC);
  Wire.write((uint8_t)0);
  bool accesOK = (Wire.endTransmission() == 0);
  if (accesOK) accesOK = (Wire.requestFrom(adresseRTC, (uint8_t) 7) == 7);
  if (accesOK)
  {
    *seconde   = dcb2bin(Wire.read());
    *minute    = dcb2bin(Wire.read());
    *heure     = dcb2bin(Wire.read());
    Wire.read(); //joursem non géré
    *jour      = dcb2bin(Wire.read());
    *mois      = dcb2bin(Wire.read());
    *annee     = dcb2bin(Wire.read());
  }
  return accesOK;
}