// Horloge pixel V1.0 Janv 2024 JPRO
// Librairie
 #include "Adafruit_NeoPixel.h"
 #define PIN  2
 #define NUMPIXELS 110
 Adafruit_NeoPixel strip (NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
 #include "RTClib.h"
 RTC_DS1307 rtc;

// Variable bp
 int etat_bp_8;
 int etat_bp_9;
 int etat_bp_10;
 int etat_bp_11;
 // Variable
 int mem1   ; int Mem2   ;  int Minutes ;
 int Heures ; int Heures24 ; bool AMPM ;
  int Jour  ; int Mois  ; int Annee  ;
  int  Heures_adj  ;
 // Variable
 int Color1 = 0 , Color2 = 0 , Color3 = 225 ; // BLEU
 //int Color1 = 255 , Color2 = 0 , Color3 = 0 ; // ROUGE

void setup() {
   Serial.begin(115200);
   if (! rtc.begin()) {
   Serial.println("Couldn't find RTC");
   Serial.flush();
   abort();   }

  pinMode(8,INPUT_PULLUP);
  pinMode(9,INPUT_PULLUP);
  pinMode(10,INPUT_PULLUP);
  pinMode(11,INPUT_PULLUP);

   strip.begin();
   // Message JP RICOIS
    
    strip.setPixelColor(3, strip.Color(Color1, Color2, Color3));
    strip.setPixelColor(6, strip.Color(Color1, Color2, Color3));
    strip.setPixelColor(61, strip.Color(Color1, Color2, Color3));
    strip.setPixelColor(71, strip.Color(Color1, Color2, Color3));
    strip.setPixelColor(79, strip.Color(Color1, Color2, Color3));
    strip.setPixelColor(85, strip.Color(Color1, Color2, Color3));
    strip.setPixelColor(98, strip.Color(Color1, Color2, Color3));
    strip.setPixelColor(104, strip.Color(Color1, Color2, Color3));
    strip.show(); 
    delay(500);
    strip.clear();      strip.show();

}


void loop() {

bool etat_bp_8  = digitalRead(8);
bool etat_bp_9  = digitalRead(9);
bool etat_bp_10 = digitalRead(10);
bool etat_bp_11 = digitalRead(11);

// LUMINOSITE  
strip.setBrightness(255);  // luminosité de la LED (maximum 255)
//strip.clear();//strip.show(); 
//strip.show();//
  /*

Serial.print(" Bp11 : ");
   Serial.print(etat_bp_11);
   Serial.print(" / bp10 : ");
   Serial.print(etat_bp_10);
   Serial.print(" / bp9 : ");
   Serial.print(etat_bp_9);
   Serial.print(" / bp8 : ");
   Serial.print(etat_bp_8);
   Serial.print(" Mem ");
   Serial.print(mem1);
   Serial.println();
   
*/

 
/*************  Now comes the time section  **************/
    
    DateTime now = rtc.now() ;
    
     if ( mem1 == 0 ) { 
        Minutes =  now.minute() ; 
        Heures24 = now.hour() ;  

       if ( Minutes == 00 ) {   Mem2 = 0  ; }

        Serial.print(Heures24); Serial.print(":")  ;
        Serial.print(Minutes); Serial.print("  OU  ")  ; 
        /// AM
       if ( Heures24 <= 12 )     { 
        Serial.print(" AM ");        
        AMPM = 0  ; 
        Heures = Heures24  ;    }

       if (Heures24 >= 13)       {
        Serial.print(" PM ");
        AMPM = 1  ;
        Heures = Heures24 -12 ;  }

       if (  Minutes >= 35  )    {  
        Heures = Heures + 1 ;  }

       if ( now.second() == 0 )  {
        strip.clear();
        strip.show();          }
       //*/
        Serial.print(mem1);Serial.print(" - ");
        Serial.print(Mem2);Serial.print(" - ");
        Serial.print(Heures);Serial.print(":");
        Serial.print(Minutes);Serial.print(":");
        Serial.print(now.second(), DEC);  
        Serial.println(" "); 
        }

//       ******* REGLEGE *******
  //int Heures ;// , Heures_adj  , Minutes_adj   ;
  //*
  

if ( etat_bp_11 == 0 ) { 
    Serial.println( "Reglage");
    strip.clear();//strip.show(); 
    strip.show();
    mem1 = 1 ;
    strip.setPixelColor(0, strip.Color(0, 0, 255));
    strip.setPixelColor(99, strip.Color(0, 0, 255));
    strip.show();
    delay (500) ; 
    }

    delay (50) ;


if ( mem1 == 1 ) { 
     Serial.print( " Reglage en cours ");
     Serial.print(mem1);Serial.print(" - ");
     Serial.print(Mem2);Serial.print(" - ");
    strip.clear();
    strip.show();
    //int Minutes_adj = 0 , Heures_adj = 0 , x , y ;
    //int Jour_adj = 0 , Mois_adj = 0 , Annee_adj = 0 ;
    strip.setPixelColor( 0, strip.Color(255, 0, 0));
    strip.setPixelColor(99, strip.Color(255, 0, 0));

    /// AM - PM 
     if (Heures24 <= 11)  {           
      Serial.print(" AM ");
      AMPM = 0  ;
      Heures = Heures24 + Heures_adj ;    
      //strip.setPixelColor(48, strip.Color(255, 0, 0));
      //strip.setPixelColor(49, strip.Color(255, 0, 0));    
      }

     if (Heures24 >= 13) {
      Serial.print(" PM ");
      AMPM = 1  ;
      Heures = Heures24 -12 + Heures_adj ;    
      if (Heures == 12) {
      Serial.print(" 00:00 ");
      Heures = 0 ;
      AMPM = 0  ;
      }
      strip.setPixelColor(77, strip.Color(255, 0, 0));
      strip.setPixelColor(78, strip.Color(255, 0, 0));     
      //Heures = Heures -12 ;  
      }

       Serial.print(AMPM);     Serial.print(" - ");
       Serial.print(Heures24); Serial.print(":")  ;
       Serial.print(Minutes);  Serial.print("  OU ")  ; 
       Serial.print(Heures);   Serial.print(":")  ;
       Serial.print(Minutes);  Serial.print(":")  ;
       Serial.print(now.second(), DEC);  
       Serial.println(" ");   

    strip.show();
    delay (50) ;  

   if ( etat_bp_10 == 0 ) {
    Minutes = Minutes + 1 ;
    Serial.println(Minutes) ;
    delay (20) ;  }

   if (  Minutes >= 35 && Mem2 == 0  )  {  
        Heures = Heures + 1 ; 
        Mem2 = 1 ;   }
   //if (  Minutes >= 35  )  {    Heures = Heures +1 ;   } 
    
   if ( Minutes >= 60 ) { Minutes = 0 ; Mem2 = 0 ;   } 

   if ( etat_bp_9 == 0 ) {
     Heures_adj  = Heures_adj  + 1 ;
      //if ( Heures_adj == 13 ) {
      //Heures_adj  = 0 ;
      //AMPM = 1 ;
      //}
     Serial.print("Heures ") ;       Serial.print(Heures) ;
     Serial.print(" Heures adj ") ;  Serial.print(Heures) ;
     Serial.println(".") ;
     delay (20) ;    }

   // MISE A L HEURE 
    if ( etat_bp_8 == 0 ) {  
     Serial.println( "Sortie");   
     if ( AMPM == 1 ) {   Heures = Heures + 12 ;  }
     mem1 = 0 ;    Heures_adj = 0  ;
     Jour=now.day();  Mois=now.month(); Annee=now.year();  
     DateTime nouvelle_date( Annee, Mois, Jour, Heures, Minutes );
     rtc.adjust(nouvelle_date);  delay (500) ; 
     strip.clear();    strip.show();
     }

  }
//*/

  
// HEURE
  if (  Minutes >= 35 )  { /////////// Heures = Heures +1 ; /////////
  }
  // IL EST
   if ( Minutes == 00 || Minutes == 15 || Minutes == 30 || Minutes == 45 )
   {   // affiche_il_est(); 
   strip.setPixelColor(0, strip.Color(Color1, Color2, Color3));
   strip.setPixelColor(1, strip.Color(Color1, Color2, Color3));
   strip.setPixelColor(3, strip.Color(Color1, Color2, Color3));
   strip.setPixelColor(4, strip.Color(Color1, Color2, Color3));
   strip.setPixelColor(5, strip.Color(Color1, Color2, Color3));
   strip.show(); 
  }
  // Mot heure ou heureS 
   if (  Heures != 12  &&  Heures != 0 )    {
   strip.setPixelColor(56, strip.Color(Color1, Color2, Color3));
   strip.setPixelColor(57, strip.Color(Color1, Color2, Color3));
   strip.setPixelColor(58, strip.Color(Color1, Color2, Color3));
   strip.setPixelColor(59, strip.Color(Color1, Color2, Color3));
   strip.setPixelColor(60, strip.Color(Color1, Color2, Color3)); }
   if ( Heures > 1  &&  Heures != 12 && Heures != 0 )   
   {  strip.setPixelColor(55, strip.Color(Color1, Color2, Color3)); 
   strip.show(); 
   }
//HEURES:
//HEURES:
  
 
switch (Heures) {
  case 0:
    strip.setPixelColor(49, strip.Color(Color1, Color2, Color3));
    strip.setPixelColor(50, strip.Color(Color1, Color2, Color3));
    strip.setPixelColor(51, strip.Color(Color1, Color2, Color3));
    strip.setPixelColor(52, strip.Color(Color1, Color2, Color3));
    strip.setPixelColor(53, strip.Color(Color1, Color2, Color3));
    strip.setPixelColor(54, strip.Color(Color1, Color2, Color3));
    strip.show();
    break;
  case 1:
    strip.setPixelColor(26, strip.Color(Color1, Color2, Color3));
    strip.setPixelColor(27, strip.Color(Color1, Color2, Color3));
    strip.setPixelColor(28, strip.Color(Color1, Color2, Color3));
    strip.show();
    break;
  case 2:
    strip.setPixelColor(7 , strip.Color(Color1, Color2, Color3));
    strip.setPixelColor(8 , strip.Color(Color1, Color2, Color3));
    strip.setPixelColor(9 , strip.Color(Color1, Color2, Color3));
    strip.setPixelColor(10, strip.Color(Color1, Color2, Color3));
    strip.show();
    break;
  case 3:
    strip.setPixelColor(11, strip.Color(Color1, Color2, Color3));
    strip.setPixelColor(12, strip.Color(Color1, Color2, Color3));
    strip.setPixelColor(13, strip.Color(Color1, Color2, Color3));
    strip.setPixelColor(14, strip.Color(Color1, Color2, Color3));
    strip.setPixelColor(15, strip.Color(Color1, Color2, Color3));
    strip.show();
    break;
  case 4:
    strip.setPixelColor(21, strip.Color(Color1, Color2, Color3));
    strip.setPixelColor(20, strip.Color(Color1, Color2, Color3));
    strip.setPixelColor(19, strip.Color(Color1, Color2, Color3));
    strip.setPixelColor(18, strip.Color(Color1, Color2, Color3));
    strip.setPixelColor(17, strip.Color(Color1, Color2, Color3));
    strip.setPixelColor(16, strip.Color(Color1, Color2, Color3));
    strip.show();
    break;
  case 5:
    strip.setPixelColor(36, strip.Color(Color1, Color2, Color3));
    strip.setPixelColor(35, strip.Color(Color1, Color2, Color3));
    strip.setPixelColor(34, strip.Color(Color1, Color2, Color3));
    strip.setPixelColor(33, strip.Color(Color1, Color2, Color3));
    strip.show();
    break;
  case 6:
    strip.setPixelColor(37, strip.Color(Color1, Color2, Color3));
    strip.setPixelColor(38, strip.Color(Color1, Color2, Color3));
    strip.setPixelColor(39, strip.Color(Color1, Color2, Color3));
    strip.show();
    break;
  case 7:
    strip.setPixelColor(29, strip.Color(Color1, Color2, Color3));
    strip.setPixelColor(30, strip.Color(Color1, Color2, Color3));
    strip.setPixelColor(31, strip.Color(Color1, Color2, Color3));
    strip.setPixelColor(32, strip.Color(Color1, Color2, Color3));
    strip.show();
    break;
  case 8:
    strip.setPixelColor(43, strip.Color(Color1, Color2, Color3));
    strip.setPixelColor(42, strip.Color(Color1, Color2, Color3));
    strip.setPixelColor(41, strip.Color(Color1, Color2, Color3));
    strip.setPixelColor(40, strip.Color(Color1, Color2, Color3));
    strip.show();
    break;
  case 9:
    strip.setPixelColor(22, strip.Color(Color1, Color2, Color3));
    strip.setPixelColor(23, strip.Color(Color1, Color2, Color3));
    strip.setPixelColor(24, strip.Color(Color1, Color2, Color3));
    strip.setPixelColor(25, strip.Color(Color1, Color2, Color3));
    strip.show();
    break;
  case 10:
    strip.setPixelColor(46, strip.Color(Color1, Color2, Color3));
    strip.setPixelColor(47, strip.Color(Color1, Color2, Color3));
    strip.setPixelColor(48, strip.Color(Color1, Color2, Color3));
    strip.show();
    break;
  case 11:
    strip.setPixelColor(65, strip.Color(Color1, Color2, Color3));
    strip.setPixelColor(64, strip.Color(Color1, Color2, Color3));
    strip.setPixelColor(63, strip.Color(Color1, Color2, Color3));
    strip.setPixelColor(62, strip.Color(Color1, Color2, Color3));
    strip.show();
    break;
  case 12:
    strip.setPixelColor(44, strip.Color(Color1, Color2, Color3));
    strip.setPixelColor(45, strip.Color(Color1, Color2, Color3));
    strip.setPixelColor(46, strip.Color(Color1, Color2, Color3));
    strip.setPixelColor(47, strip.Color(Color1, Color2, Color3));
    strip.show();
    break;
  default:
    Serial.println("DEFAUT heures");
    // if nothing else matches, do the default
    // default is optional
    break;

}
  
//*///// prefixe ////////////////////////////////////////
//PREFIXE:
  if ( Minutes >= 15  && Minutes <= 19  )   {  
   //et
   strip.setPixelColor(86, strip.Color(Color1, Color2, Color3));
   strip.setPixelColor(87, strip.Color(Color1, Color2, Color3));
   strip.show();
   }
  if ( Minutes >= 35  && Minutes  <= 44  
   ||   Minutes >= 50  && Minutes <= 59  )   { 
   strip.setPixelColor(66, strip.Color(Color1, Color2, Color3));
   strip.setPixelColor(67, strip.Color(Color1, Color2, Color3));
   strip.setPixelColor(68, strip.Color(Color1, Color2, Color3));
   strip.setPixelColor(69, strip.Color(Color1, Color2, Color3));
   strip.setPixelColor(70, strip.Color(Color1, Color2, Color3));
   strip.show();
   }
  if ( Minutes >= 45  && Minutes <= 49  )   {   
   //moins
   strip.setPixelColor(66, strip.Color(Color1, Color2, Color3));
   strip.setPixelColor(67, strip.Color(Color1, Color2, Color3));
   strip.setPixelColor(68, strip.Color(Color1, Color2, Color3));
   strip.setPixelColor(69, strip.Color(Color1, Color2, Color3));
   strip.setPixelColor(70, strip.Color(Color1, Color2, Color3));
   //LE
   strip.setPixelColor(72, strip.Color(Color1, Color2, Color3));
   strip.setPixelColor(73, strip.Color(Color1, Color2, Color3));
   strip.show();
   }
  //
  
//MINUTES:
  if ( Minutes >= 5   && Minutes <= 9   
   ||   Minutes >= 55  && Minutes <= 59  )  
   { 
   strip.setPixelColor(94, strip.Color(Color1, Color2, Color3));
   strip.setPixelColor(95, strip.Color(Color1, Color2, Color3));
   strip.setPixelColor(96, strip.Color(Color1, Color2, Color3));
   strip.setPixelColor(97, strip.Color(Color1, Color2, Color3));
   strip.show();
   //goto M_CINQ       ; 
   }
  if ( Minutes >= 10  && Minutes <= 14  
   ||   Minutes >= 50  && Minutes <= 54  )  
   {  
   strip.setPixelColor(74, strip.Color(Color1, Color2, Color3));
   strip.setPixelColor(75, strip.Color(Color1, Color2, Color3));
   strip.setPixelColor(76, strip.Color(Color1, Color2, Color3));
   strip.show();
   //  goto M_DIX        ; 
   }
  if ( Minutes >= 15  && Minutes <= 19      
   ||   Minutes >= 45  && Minutes <= 49  )  
   {  
   strip.setPixelColor(84, strip.Color(Color1, Color2, Color3));
   strip.setPixelColor(83, strip.Color(Color1, Color2, Color3));
   strip.setPixelColor(82, strip.Color(Color1, Color2, Color3));
   strip.setPixelColor(81, strip.Color(Color1, Color2, Color3));
   strip.setPixelColor(80, strip.Color(Color1, Color2, Color3));
   strip.show();
   // goto M_QUART      ;
   } 
  if ( Minutes >= 20  && Minutes <= 29 
   ||   Minutes >= 40  && Minutes <= 44  )   {  
   strip.setPixelColor(88, strip.Color(Color1, Color2, Color3));
   strip.setPixelColor(89, strip.Color(Color1, Color2, Color3));
   strip.setPixelColor(90, strip.Color(Color1, Color2, Color3));
   strip.setPixelColor(91, strip.Color(Color1, Color2, Color3));
   strip.setPixelColor(92, strip.Color(Color1, Color2, Color3));
   strip.show();
   // goto M_VINGT      ; 
   } 
  if ( Minutes >= 25  && Minutes <= 29
   ||   Minutes >= 35  && Minutes <= 39  )   { 
   //5
   strip.setPixelColor(94, strip.Color(Color1, Color2, Color3));
   strip.setPixelColor(95, strip.Color(Color1, Color2, Color3));
   strip.setPixelColor(96, strip.Color(Color1, Color2, Color3));
   strip.setPixelColor(97, strip.Color(Color1, Color2, Color3));
   //
   strip.setPixelColor(93, strip.Color(Color1, Color2, Color3));
   //20
   strip.setPixelColor(88, strip.Color(Color1, Color2, Color3));
   strip.setPixelColor(89, strip.Color(Color1, Color2, Color3));
   strip.setPixelColor(90, strip.Color(Color1, Color2, Color3));
   strip.setPixelColor(91, strip.Color(Color1, Color2, Color3));
   strip.setPixelColor(92, strip.Color(Color1, Color2, Color3));
   strip.show();
   //  goto M_V_CINQ ; 
   } 
  if ( Minutes >= 30  && Minutes <= 34  )   {  
   //et
   strip.setPixelColor(86, strip.Color(Color1, Color2, Color3));
   strip.setPixelColor(87, strip.Color(Color1, Color2, Color3));
   //demie
   strip.setPixelColor(109, strip.Color(Color1, Color2, Color3));
   strip.setPixelColor(108, strip.Color(Color1, Color2, Color3));
   strip.setPixelColor(107, strip.Color(Color1, Color2, Color3));
   strip.setPixelColor(106, strip.Color(Color1, Color2, Color3));
   strip.setPixelColor(105, strip.Color(Color1, Color2, Color3));
   strip.show();
   //  goto M_ET_DEMIE   ; 
   } 
 //

//
//1 A 4 MINUTES
//QUATRE_MINUTE:
   if ( Minutes == 1 || Minutes == 6 || Minutes == 11 || Minutes == 16
   ||   Minutes == 21 || Minutes == 26 || Minutes == 31 || Minutes == 36
   ||   Minutes == 41 || Minutes == 46 || Minutes == 51 || Minutes == 56 )
   {    strip.setPixelColor(103, strip.Color(255, 0, 255));    }
   if ( Minutes == 2 || Minutes == 7 || Minutes == 12 || Minutes == 17
   ||   Minutes == 22 || Minutes == 27 || Minutes == 32 || Minutes == 37
   ||   Minutes == 42 || Minutes == 47 || Minutes == 52 || Minutes == 57 )
   {    strip.setPixelColor(103, strip.Color(255, 0, 255));
        strip.setPixelColor(102, strip.Color(255, 0, 255));    }
   if ( Minutes == 3 || Minutes == 8 || Minutes == 13 || Minutes == 18
   ||   Minutes == 23 || Minutes == 28 || Minutes == 33 || Minutes == 38
   ||   Minutes == 43 || Minutes == 48 || Minutes == 53 || Minutes == 58 )
   {    strip.setPixelColor(103, strip.Color(255, 0, 255));
        strip.setPixelColor(102, strip.Color(255, 0, 255)); 
        strip.setPixelColor(101, strip.Color(255, 0, 255));    }
   if ( Minutes == 4 || Minutes == 9 || Minutes == 14 || Minutes == 19
   ||   Minutes == 24 || Minutes == 29 || Minutes == 34 || Minutes == 39
   ||   Minutes == 44 || Minutes == 49 || Minutes == 54 || Minutes == 59 )
   {    strip.setPixelColor(103, strip.Color(255, 0, 255));
        strip.setPixelColor(102, strip.Color(255, 0, 255)); 
        strip.setPixelColor(101, strip.Color(255, 0, 255));  
        strip.setPixelColor(100, strip.Color(255, 0, 255));    }
   strip.show();
   
// FIN
delay(50);

}
GND5VSDASCLSQWRTCDS1307+