tempo multiples sans utiliser delay

merci a tous
toutes les astuces donnees sont le bienvenue
mais pour moi elle donnent toute le meme resultat
la duree HIGH de la led est toujour identique a la duree LOW seule les duree changent
mon besoin je le rappelle est HIGH 1 minute - LOW 5 minutes
mon test
fonctionne 1 cycle
au deuxieme la led reste HIGH

#define TEMPO 360 // 5 minutes = 360 secondes.
unsigned long DUREE_ECOULEE, TOP_CHRONO;
boolean etat_led;
unsigned long temps; 
byte et_led1=0;
byte top=0;
int led=11;

void setup(){
     pinMode(led, OUTPUT);
     etat_led = 1;
     digitalWrite(led, etat_led);
     TOP_CHRONO = millis()/1000;
}

  void loop(){
      et_led1=digitalRead(led);
      
      if(top==LOW){
  Traiter_une_minute();
  }
   if(top==HIGH){
   Traiter_cinq_minutes(); 
   }
           }//fin loop
           
       void Traiter_une_minute() { 
//              if(et_led1==HIGH){ balise(); }
                if(millis()/1000 - temps > 60)
		{
  		etat_led = !etat_led; //on inverse l'état de la LED
		digitalWrite(led, etat_led); //on allume ou éteint
		temps = millis()/1000; //on stocke la nouvelle heure
                top=HIGH;
                delay(100);
		}
                }
//-------------------------------------------------------------------        
 
  void Traiter_cinq_minutes() {
          //      if(et_led1==HIGH){ balise();}
                DUREE_ECOULEE = (millis()/1000 - TOP_CHRONO);
                if (DUREE_ECOULEE == TEMPO){ 
                TOP_CHRONO = millis()/1000;
                delay(100);
                top=LOW;
                } 
                }