void MaJ_heure () {
  // Lecture de l'heure sur le RTC
  RTC.readTime();
  heures = RTC.h;
  if (heures > 11) {
    matin = false;
    heures -= 12;
  }
  minutes = RTC.m;
  secondes = RTC.s;
  if (DEBUG) Serial << "MaJ_heure = " << heures << ":" << minutes << ":" << secondes << endl ;
}

void MaJ_horloge () {
  int num_secm1;
  if (minutes5 == 1) {
    for (int i = 0; i < 12; i++) {
      int n_minutes = (i * 5 + offset) % 60;
      leds[n_minutes] = CRGB::LightGrey;
    }
  }
  byte num_heures = (heures * 5 + int(minutes / 12) + offset ) % 60;
  byte num_minutes = (minutes + offset) % 60;
  num_secondes = (secondes + offset) % 60;

  if (! sens_horaire)
  {
    num_heures = (60 - num_heures) % 60;
    num_minutes = (60 - num_minutes) % 60;
    num_secondes = (60 - num_secondes) % 60;
  }

  if (num_secondes == 0) {
    num_secm1 = 59;
  }
  else
  {
    num_secm1 = (num_secondes - 1) % 60;
  }
  int num_secp1 = (num_secondes + 1) % 60;

  // Couleur des secondes
  switch (anim) {
    case NO_ANIM :
    case MOVING_RAINBOW :
    case RANDOM_PAL :
      if (numero_hue == 0) {
        couleur = CRGB::White;
        couleur1 = CRGB::LightGrey;
      }
      else {
        couleur = CHSV(numero_hue, 255, 255);
        couleur1 = CHSV(numero_hue, 255, 120);
      }
      leds[num_secm1] = couleur1;
      leds[num_secp1] = couleur1;
      leds[num_secondes] = couleur;
      break;
    case COLOR_PULSE :
    case COLOR_BAND :
    case COLOR_BAND_AR :
      leds[num_secm1] = CRGB::DeepSkyBlue;
      leds[num_secp1] = CRGB::DeepSkyBlue;
      leds[num_secondes] = CRGB::Blue;
      break;
    case GLOWING_SEC :
      leds[num_secondes] = CHSV(numero_hue, 255, sat);
      break;
    case BBR :
      leds[num_secondes] = CHSV(numero_hue, 255, 255);
      break;
    default :
      if (DEBUG) Serial << "Problème horloge " << endl ;
      break;
  }

  // Affichage des heures et minutes
  if (num_heures == num_minutes) {
    // Alternent si superposées
    if (secondes % 2 == 1) {
      leds[num_heures] = CRGB::Red;
    }
    else {
      leds[num_minutes] = CRGB::Green;
    }
  } else {
    leds[num_heures] = CRGB::Red;
    leds[num_minutes] = CRGB::Green;
  }

  // Cas de l'animation aléatoire
  if (alea == 1) {
    int per_change_anim = 15;  // Période de changement aléatoire des animations
    if (secondes % per_change_anim == 0) {
      if (change_anim == 0) {
        anim = random (ALEA);
        change_anim = 1;
      }
    } else {
      change_anim = 0;
    }
  }
}

void avanceHeure () {
  // Avance l'heure
  secondes += 1;
  if (secondes == 60) {
    secondes = 0;
    minutes += 1;
    if (minutes == 60) {
      minutes = 0;
      heures += 1;
      heures = heures % 12;
    }
  }
  // Mise à jour toutes les 30 minutes
  if (minutes % 30 == 0 && secondes == 0) {
    MaJ_heure();
  }

}

void GestionHeure ()
{
  TlastHorloge += periode_horloge;  // = millis();
  avanceHeure();
  change = true;
  change_heure = true;
  if (DEBUG) Serial << "MaJ horloge " << TlastHorloge << endl ;
  if (DEBUG) Serial << "H " << heures << " M " << minutes << " S " << secondes << endl ;
  if (anim == GLOWING_SEC) {
    sat = 30;
    dir_sat = 1;
  }
}

