Proyecto, Alarma casera, con sensores, rele, un led, dos pulsadores

Condiciones de operación:
1.- S1: al presionarlo se activa la alarma (con un retardo de 30 segundos).
2.- S2: al presionarlo se desactiva la alarma (LED1 ON permanente)
3.- El LED1, oscilará a 2 Hz al presionar S1 (durante tiempo de retardo)
4.- El LED1, oscilará a 1 Hz cuando la alarma de encuentre armada (leyendo estado de detectores)
5.- LED1, oscilará a 0.5 Hz y se activarán las salidas (Relé y Sirena) cuando se accione algún detector.
6.- Incluir otras condiciones de operación para el proyecto o modificar alguna de las descritas (al menos una)

ENTRADAS: pulsador 1 (S1), pulsador 2 (S2), detectores (sensor PIR)
SALIDAS: led (muestra las condiciones de alarma), Rele, Sirena (piezo)

SOLO NECESITO UNA AYUDA QUE ME DIGA COMO HACERLO.

mi mayor problema es que al presionar un pulsador, el led empiece a parpadear y pasado 30 segundos quede parpadeando a otra velocidad y empiecen a funcionar los detectores.

Acontinuacion dejo programa que llevo, me falta poner S1 que debe hacer parpadear el led a distintas velocidades.

int pirEstado = 0; // estado del sensor

int pinPir = 10; // pin del sensor
int botonPin1 = 11; // pin del pulsador1
int botonPin2 = 12; // pin del pulsador2
int ledPin = 5; // pin del LED
int pinSpeaker = 6; //pin del speaker
int pinrele = 7; //pin rele
int botonEstado = 0; // estado del pulsador

void setup(){
Serial.begin(9600);
pinMode(pinPir, INPUT);
pinMode(ledPin, OUTPUT);
pinMode(botonPin1, INPUT);
pinMode(botonPin2, INPUT);
pinMode(pinrele, OUTPUT);
pinMode(pinSpeaker, OUTPUT);
digitalWrite(pinPir, LOW); // se inicializa el PIR y el LED

digitalWrite(ledPin, HIGH);

Serial.print(“Calibrando sensor “);
for(int i = 0; i < 10; i++){
Serial.print(”.”); // se espera aproximadamente 10
delay(1000); // segundos para la calibracion
}
Serial.println(" Listo");
Serial.println(“SENSOR ACTIVADO”);
delay(50);
}

void loop(){
pirEstado = digitalRead(pinPir); //se lee el estado del pir
if (pirEstado == HIGH) { // si el sensor detecto movimiento
digitalWrite(ledPin, HIGH); // se prende el led y se emite un
delay(300);
digitalWrite(ledPin, LOW);
delay(300);
tone(6, 400); // sonido por el speaker
digitalWrite(pinrele, HIGH); // prendo rele
}
botonEstado = digitalRead(botonPin2);
if(botonEstado == HIGH){ // si se pulsa el boton
digitalWrite(ledPin, HIGH); // se apaga el led y se deja de
noTone(6); // emitir sonido por el speaker
digitalWrite(pinrele, LOW); //apago rele
}
}

Muevo el tema a Hardware
No es tema para sección Proyectos.