Control de tiempo para diferentes salidas en arduino

Espero que algun experto en c o arduino pueda ayudarme con un problemilla que no se solucionar.

Estoy haciendo un programa en arduino para un proyecto personal y consiste en el control de giro de 2 motores de continua mediante 2 interruptores y un pulsador:

- Con el interruptor 1 controlo de forma manual el sentido de giro del motor 1.

- Con el interruptor 2 controlo de forma manual el motor 2.

- Y con el botón lo que pretendo es controlar los 2 motores haciendo que giren un tiempo determinado cada uno de ellos, es decir, imaginad que pulsando el botón los dos motores deben iniciar la marcha y uno de ellos pararse en 3 segundos y el otro se parará en 5 segundos.

Parece sencillo pero yo no he conseguido que me funcione este ultimo boton con control de tiempo, he descartado el uso de delay porque si lo uso tendria que esperar que terminara el delay del motor 1 para poder usar el del motor 2.

Os dejo aquí mi programa, lo he estructurado lo mejor que he podido:

// programa control motores por tiempo ** Mario Martinez **
int pin_pulsador1 = 2;
int pin_pulsador2 = 3;
int pin_pulsador3 = 4;
int motor1_derecha = 6;
int motor1_izquierda= 9;
int motor2_derecha = 10;
int motor2_izquierda= 11;
boolean estado_pulsador1;
boolean estado_pulsador2;
boolean estado_pulsador3;
void setup() {
 pinMode (pin_pulsador1,INPUT);
 pinMode (pin_pulsador2,INPUT);
 pinMode (pin_pulsador3,INPUT);
 pinMode (motor1_derecha, OUTPUT);
 pinMode (motor1_izquierda, OUTPUT);
 pinMode (motor2_derecha, OUTPUT);
 pinMode (motor2_izquierda, OUTPUT);
}
void loop() {
estado_pulsador1 = digitalRead(pin_pulsador1);
estado_pulsador2 = digitalRead(pin_pulsador2);
estado_pulsador3 = digitalRead(pin_pulsador3);
//**** control manual Motor 1****************
if(estado_pulsador1==1){    // el motor 1 gira a la derecha
  digitalWrite(motor1_derecha,HIGH);
  digitalWrite(motor1_izquierda,LOW);
}
if(estado_pulsador1==0){   // el motor 1 gira a la izquierda
  digitalWrite(motor1_derecha,LOW);
  digitalWrite(motor1_izquierda,HIGH);
}
 //**** control manual Motor 2***************
if(estado_pulsador2==1){   // el motor 2 gira a la derecha
  digitalWrite(motor2_derecha,HIGH);
  digitalWrite(motor2_izquierda,LOW);
}
if(estado_pulsador2==0){   // el motor 2 gira a la izquierda
  digitalWrite(motor2_derecha,LOW);
  digitalWrite(motor2_izquierda,HIGH);
}
 //**** control automatico Motores 1, 2 y 3 ****
if(estado_pulsador3==1){   // Los 3 motores giran a la izquierda un tiempo determinado por cada motor
}
if(estado_pulsador3==0){   // Los 3 motores giran a la derecha un tiempo determinado por cada motor
 }
}

Añade tu respuesta

Haz clic para o