problema con millis

Hola estoy tratando de dejar de usar delay, pero no puedo hacer que me funcione bien una alarma con tiempo para un cuartel de bomberos voluntarios.

pongo ejemplo de lo que hice:

unsigned long startMillis;
unsigned long currentMillis;
const unsigned long period = 7000; // tiempo de espera con la sirena encendida
const byte sirena = 13; // salida siena
int boton=2;

void setup()

{

pinMode(ledPin, OUTPUT);
startMillis = millis();
pinMode(boton, INPUT);

}

void loop()
{
currentMillis = millis();

if (currentMillis - startMillis >= period)

{

digitalWrite(sirena, digitalRead(boton));
startMillis = currentMillis;
}
}

Lo que sucede es que tarda los 7 segundos para leer el boton y luego si mantiene la sirena encendida por 7 segundos.

una vez resuelto esto tengo que hacerlo con repeticiones, ejemplo: alarma1 : 27 segundos encendida 20 segundos apagara y que se repita 2 veces.

Desde ya muchas gracias por tomarse el tiempo de leer mi consulta, y sera agradecida cualquier ayuda.

Non-blocking timing tutorials:
Several things at a time.
Beginner's guide to millis().
Blink without delay().

Por favor lee las Normas del foro y edita el código usando etiquetas </>
Tu código debe verse asi

unsigned long startMillis; 
unsigned long currentMillis;

Pero está en las normas, de modo que con solo leer lo resuelves.