TIEMPOS EN ARDUINO

Hola tengo un problema en la programación con los tiempos de arduino. necesito hacer una situacion de tiempos simultáneos, donde pueda encender o activar una valvula durante un tiempo, y dentro de ese tiempo se me active una válvula antiretorno.

El otro problema es que luego de que mi programa hace varios accionamientos se detiene el programa y se desconfigura totalmente, para que vuelva a arrancar hay que resetear y arranca en estado inicial.

este es parte del programa:

void setup()
{

pinMode(val1,OUTPUT);
pinMode(val2,OUTPUT);
pinMode(val3,OUTPUT);
pinMode(val4,OUTPUT);
pinMode(val5,OUTPUT);
pinMode(buttonPin ,INPUT);
// attachInterrupt(0,contar,FALLING);
pinMode(buttonPin1 ,INPUT);
}
void loop(){
estadoboton =digitalRead (buttonPin);
estadoboton1 =digitalRead (buttonPin1);
if (estadoboton != estadobotonAnterior && estadoboton1 != estadobotonAnterior1){
if (antirebote (buttonPin)&& antirebote1 (buttonPin1) ){

//digitalWrite(val2,LOW);
digitalWrite(val3,HIGH);
delayer6(4000);
digitalWrite(val2,LOW);
delayer(1500);
digitalWrite(val1,HIGH);
delayer1(3000);
digitalWrite(val3,LOW);
digitalWrite(val1,LOW);
delayer2(900);
digitalWrite(val4,HIGH);
delayer3(900);
digitalWrite(val5,HIGH);
delayer4(900);
digitalWrite(val4,LOW);
digitalWrite(val5,LOW);
delayer5(2000);
digitalWrite(val2,LOW);
}
}

if (antirebote (buttonPin)==false && antirebote1 (buttonPin1)== true)
{
digitalWrite(val2,HIGH);
digitalWrite(val3,LOW);
digitalWrite(val1,LOW);
digitalWrite(val4,LOW);
digitalWrite(val5,LOW);
}
else if (antirebote (buttonPin)==false && antirebote1 (buttonPin1)==false)
{
digitalWrite(val2,LOW);
digitalWrite(val3,LOW);
digitalWrite(val1,LOW);
digitalWrite(val4,LOW);
digitalWrite(val5,LOW);
}
}

//void contar(){
// if (estado1=LOW)
// {
//digitalWrite(val4,LOW);
//digitalWrite(val5,LOW);
//digitalWrite(val2,LOW);
//digitalWrite(val1,LOW);
//digitalWrite(val3,LOW);
// }
//
//}

void delayer(long tiempo){
unsigned long timeA=0;
timeA= millis();
while((millis()-timeA)<tiempo){

if (antirebote1 (buttonPin1)==false)
{
break;
}

delay(15);

}
}

void delayer1(long tiempo1){
unsigned long timeA1=0;
timeA1= millis();
while((millis()-timeA1)<tiempo1){

if (antirebote1 (buttonPin1)==false)
{
break;
}

delay(15);

}
}
void delayer2(long tiempo2){
unsigned long timeA2=0;
timeA2= millis();
while((millis()-timeA2)<tiempo2){

if (antirebote1 (buttonPin1)==false)
{
break;
}
delay(15);

}
}
void delayer3(long tiempo3){
unsigned long timeA3=0;
timeA3= millis();
while((millis()-timeA3)<tiempo3){

if (antirebote1 (buttonPin1)==false)
{
break;
}
delay(15);

}
}
void delayer4(long tiempo4){
unsigned long timeA4=0;
timeA4= millis();
while((millis()-timeA4)<tiempo4){

if (antirebote1 (buttonPin1)==false)
{
break;
}
delay(15);

}
}

void delayer5(long tiempo5){
unsigned long timeA5=0;
timeA5= millis();
while((millis()-timeA5)<tiempo5){

if (antirebote1 (buttonPin1)==false)
{
break;
}
delay(15);
}

}

void delayer6(long tiempo6){
unsigned long timeA6=0;
timeA6= millis();
while((millis()-timeA6)<tiempo6){

if (antirebote1 (buttonPin1)==false)
{
break;
}
delay(15);
}

}

estaba usando delays y me recomiendan ahora usar millis. ya no entiendo porque me da tantos problemas.

No se debe publicar acá! Normas del foro! Una vez que corrijas tus errores de acuerdo con las normas del foro, te muevo este mensaje a donde te lo van a responder.