porfavor ayúdenme con mi trabajo

no logro poder hacerlo porfavor ayúdenme esto es lo que tengo que hacer
El proyecto consiste en controlar las luces de una casa como se describe a
continuación:
1. El primer led se controlará mediante un pushButton así:
1. Al presionar una vez, el led se encenderá mediante 30 segundos.
2. Si el botón se presiona una segunda vez en un periodo de 50
milisegundos, el led permanecerá encendido 90 segundos.
3. Si el botón se presiona una segunda vez después de 50 milisegundos,
el led se apagará.
4. Si se recibe una 'A' por el puerto serial, el led se encenderá por 30
segundos.
5. Si se recibe una 'B' por el puerto serial, el led se encenderá por 90
segundos.
6. Si se recibe una 'C' por el puerto serial, el led se apagará.
2. El segundo y el tercer led se controlan así:
1. Mediante dos botones, donde al presionar cualquiera de los dos
botones, se encenderán los dos leds y permanecerán encendidos 30
segundos.
2. Si el mismo botón que se presiono para encender los leds, se presiona
una segunda vez en un periodo de 50 milisegundos, los leds
permanecerán encendidos por 90 segundos.
3. Si el mismo botón se presiona una tercera vez en el mismo periodo de
50 milisegundos, los dos led encenderán de manera intermitente, uno a
la vez por 250 milisegundos y por un periodo de 15 segundos.
4. Si por el puerto serie se recibe una 'D' se realiza la actividad 1 de este
inciso.
5. Si se recibe una 'E' por el puerto serie, se realiza la segunda actividad
descrita en este inciso.
6. Si se recibe por el puerto serie una 'F' , se realiza la actividad 3 de este
inciso
7. Si se recibe una 'G', se apagan los dos leds.
3. Si cualquier botón permanece apretado por 100 milisegundos, todos los
leds encenderán al mismo tiempo de manera intermitente, con una
duración de 75 milisegundos encendidos y 650 milisegundos apagados,
esta acción permanecerá así por un minuto o hasta que se presione
cualquier botón por un periodo de 100 milisegundos.
4. El punto 3 se realizara también si se recibe por el puerto seria la letra 'T',
con lo cual los leds parpadearan como se describió y si se recibe otra 'T',
la actividad terminará.
esto es lo que llevo lo que me causa problemas son los tiempos los cuales no se como hacerlos porfavor ayudenme
int led = 9;
int led1 = 10;
int led2 = 11;
int boton = 12;
int boton1 = 13;
int boton2 = 8;
int x = 0;
int y = 0;
int z = 0;
int estado = 0;
int estado1 = 0;
int estado2 = 0;
char val;
long actual;
long tinicio =0;
int ledStatus = false;
int buttonState = 0;
int lastButtonState = 0;
int lastButtonState2 = LOW;
int reading;
long lastDebounceTime = 0;
long debounceDelay = 200;
int input;
void parpa(){
for(int i =0; i<5; i++);{
digitalWrite(led2, LOW);
digitalWrite(led1, HIGH);
delay(50);
digitalWrite(led1, LOW);
digitalWrite(led2, HIGH);
delay(50);
}
}
void setup() {
pinMode(boton, INPUT);
pinMode(boton1, INPUT);
pinMode(boton2, INPUT);
pinMode(led, OUTPUT);
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
Serial.begin(9600);
}
void loop(){
estado = digitalRead(boton2);
if(estado == HIGH){
delay(90);
x++;
if(x > 4){
x = 1;
}
}
if (x == 1 ){
actual=millis();
if((actual -tinicio)/100>5){
digitalWrite(led, HIGH);
}
}
if (x == 2 ){
digitalWrite(led, HIGH);
delay(500);
digitalWrite(led, LOW);
}
if ( x == 3){
digitalWrite(led, LOW);
}
if(Serial.available()){
val = Serial.read();
Serial.print(val);
}
if( val == 'a' ){
digitalWrite(led, HIGH);//activa el LED
delay(300);
}
if( val == 'b' ){
digitalWrite(led, HIGH);
delay(100);
}
if( val == 'c' ){
digitalWrite(led, LOW);
}
if (Serial.available()>0){
input=Serial.read();
if (input=='1'){
digitalWrite(led, HIGH);
delay(30000);
}
else{
digitalWrite(led, LOW); }
}
estado1 = digitalRead(boton1);
if(estado1 == HIGH){
delay(90);
y++;
if(y > 3){
y = 1;
}
}
if (y == 1 ){
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
delay(2);
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
}
if (y == 2 ){
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
delay(30);
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
}
if ( y == 3){
void parpa();
}
estado2 = digitalRead(boton);
if(estado2 == HIGH){
delay(90);
y++;
if(y > 3){
y = 1;
}
}
if (y == 1 ){
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
delay(2);
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
}
if (y == 2 ){
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
delay(30);
}
if ( y == 3){
void parpa();
}
if( val == 'g' ){
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
}
if( val == 'b' ){
digitalWrite(led, HIGH);
delay(100);
}
if( val == 'c' ){
digitalWrite(led, LOW);
}
}