ayuda a prender parpadeo de 4 leds con 4 botones (Doy recompensa $$$)

Hola amigos , soy nuevo con esto de arduino y tengo una super duda con la que llevo dias y aun no encuentro respuestas pero tal vez para ustedes sea fácil y sea algo sencillo.

tengo 4 leds y cada led tiene un boton con el que se prende y apaga , al prender el led va ir parpadeando de lento a rapido hasta que quede completamente encendido.

mis problemas son estos, cuando está parpadeando un led y quiero encender otro no puedo hasta que termine el ciclo anterior y lo que quiero es que cada led se pueda prender cada uno con su ritmo sin importar que ya haya uno prendido. y otro problema es que cuando llega a 0 el tiempo de parpadeo del led ya no lo puedo apagar. este es el codigo que usaba, lo estoy intentando con dos led...otro problema es que el tiempo donde el led empieza a parpadear rapido, casi no dura y quisiera que durara mas.

int botonMto=7; int botonCld=6; int Mantenimiento =12; int Calidad=11; int tiempo =1000; int tiempo1 = 1000; int tiempo2 = 50; int tiempo3 =1000; void setup() { Serial.begin(9600); pinMode(botonMto,INPUT); //push button pin pinMode(botonCld,INPUT); pinMode(botonIng,INPUT); pinMode(botonMfa,INPUT); pinMode(Mantenimiento,OUTPUT); pinMode(Calidad,OUTPUT); pinMode(Ingenieria,OUTPUT); pinMode(Manufactura,OUTPUT); // LED pin }

void loop() {

int pulsador1 = digitalRead(botonMto);

while( pulsador1 == HIGH ) //cuando se aplasta el boton {

//blink digitalWrite(Mantenimiento,HIGH); delay(tiempo1-=tiempo2); digitalWrite(Mantenimiento,LOW); delay(tiempo1); Serial.println(tiempo1); pulsador1 = digitalRead(botonMto); //refrescar el valor

} if (pulsador1 == LOW); { digitalWrite(Mantenimiento,LOW); pulsador1 = digitalRead(botonMto); //refrescar el valor tiempo1= tiempo; } if(tiempo1==0) { if(pulsador1 == LOW); { digitalWrite(Mantenimiento,LOW); } }

int pulsador2 = digitalRead(botonCld); while( pulsador2 == HIGH ) //cuando se aplasta el boton {

//blink digitalWrite(Calidad,HIGH); delay(tiempo3-=tiempo2); digitalWrite(Calidad,LOW); delay(tiempo3); Serial.println(tiempo1); pulsador1 = digitalRead(botonCld); //refrescar el valor

} if (pulsador2 == LOW); { digitalWrite(Calidad,LOW);

} }

se que uno de los problemas está en que uso delay, pero no logro comprender bien la funcion millis y menos que haga eso que quiero hacer, ayudenme porfavor