Encender led con millis

Estoy haciendo un programa con un RTC (DS3231) y un pulsador que uso como switch que consiste en lo siguiente:
-Si los minutos transcurridos son un numero mayor a 30 que encienda el led (funciona perfecto)
-Si presiono el pulsador apagar el led ( funciona perfecto)
-El problema es que necesito reemplazar el delay que hace si el boton esta presionado (delay (5555)
por millis para qe no retrase otros leds y con milllis no me funciona bien antes de volver a encenderse
(por el loop)

 #include <Sodaq_DS3231.h>

//Test RTC DS3231 
 
#include <Wire.h>
//#include = "Sodaq_DS3231.h"
 int boton = 3;
int led =2 ;
int periodo =  300000 ;
unsigned long tiempoAnterior = 0;
       
  
char weekDay[][4] = {"Dom", "Lun", "Mar", "Mie", "Jue", "Vie", "Sab" };
 
//año, mes, dia, hora, minutos, segundos y dia de la semana (0=Domingo hasta 6=Sabado)
//Si se escribe una hora o fecha inexistente se puede interferir con la normal operación del RTC
 
DateTime dt(2018, 2, 10, 03,56, 22, 6);  //año, mes, dia, hora, min, seg, diasem
 
void setup() {
 
 Serial.begin(115200); // Abre el puerto serie para mostrar valores leídos
  
  Wire.begin();         //Inicializa la comunicacion con el RTC
  rtc.begin();          //Inicializa el RTC
  //rtc.setDateTime(dt);  //Establece fecha y hora cargada en "dt" 
pinMode (boton, INPUT);
  pinMode (led, OUTPUT);// put your setup code here, to run once:
              
 
}
void loop() {
   
    DateTime now = rtc.now(); //Leer datos del RTC y mostrar
    
    Serial.print(now.minute(), DEC);

    Serial.println();
    delay(1000); 
  
 if ( now.minute() > 30)
 {digitalWrite (led, HIGH);
     
    }

  


  if(((digitalRead (boton) == HIGH) && (digitalRead (led) == HIGH) && (millis()>tiempoAnterior+periodo))){  
    digitalWrite(led,LOW);  
   
    delay (55555);
    }

}