Presionar PM1 para motor

Al presionar el botón PM1, el led D1 debe apagarse y el motor 2 debe subir por 2
segundos y parar.
• Después de 1 segundo, se debe encender automáticamente el Motor de
Desplazamiento hacia la izquierda también por 2 segundos y parar.
• Después de 1 segundo, se debe encender automáticamente el Motor 1, el cual debe
bajar también por 2 segundos y parar

Como hago en este caso, hasta ahora voy así, tiene que estar el led aqua prendido y al presionar el boton PM1 debe apagarse;pero eso no sucede, cual es el problema ahi aparte, también debe iniciar todo el motor al presionar PM1, y eso tampoco sucede, necesito su ayuda por favor.

int paq1=0;
int LEDAQUA=9;
int LEDAMARILLO=8;
int MAB2=7;
int MAR2=6;
int MDR=5;
int MIZ=4;
int MAR1=3;
int MAB1=2;
int paquete;
int PM1=12;

void setup() {
pinMode(13,INPUT);
pinMode(12,INPUT);
pinMode(11,INPUT);
pinMode(10,INPUT);
pinMode(9,INPUT);
pinMode(8,INPUT);
pinMode(7,INPUT);
pinMode(6,INPUT);
pinMode(5,INPUT);
pinMode(4,INPUT);
pinMode(3,INPUT);
pinMode(2,INPUT);
Serial.begin(9600);
}
void subirMotor2()
{
digitalWrite(MAR1,LOW);
digitalWrite(MAB1,LOW);
digitalWrite(MAR2,HIGH);
digitalWrite(MAB2,LOW);
digitalWrite(LEDAQUA,LOW);
delay(2000);
}
void pararMotor2()
{
digitalWrite(MAR1,LOW);
digitalWrite(MAB1,LOW);
digitalWrite(MAR2,LOW);
digitalWrite(MAB2,LOW);
delay(1000);
}
void desplazamientoizquierdaMotor()
{
digitalWrite(MIZ,HIGH);
digitalWrite(MAB1,LOW);
digitalWrite(MAR2,LOW);
digitalWrite(MAB2,LOW);
delay(2000);
}
void pararMotor()
{
digitalWrite(MIZ,LOW);
digitalWrite(MAB1,LOW);
digitalWrite(MAR2,LOW);
digitalWrite(MAB2,LOW);
delay(1000);
}
void bajarMotor1()
{
digitalWrite(MAB1,HIGH);
digitalWrite(MAR1,LOW);
digitalWrite(MAR2,LOW);
digitalWrite(MAB2,LOW);
delay(2000);
}
void detenerMotor1()
{
digitalWrite(MAB1,LOW);
digitalWrite(MAR1,LOW);
digitalWrite(MAR2,LOW);
digitalWrite(MAB2,LOW);
delay(1000);
}
int leerPM1;
int leerLEDD1;
int leerPM2;
void loop() {
leerPM1 = digitalRead(PM1);
Serial.println("Presione PM1 para inicio de secuencia");
while(leerPM1 == 0)
{
leerPM1 = digitalRead(PM1);
digitalWrite(LEDAQUA,HIGH);
}
subirMotor2();
delay(2000);
while(leerPM1 == 0)
{
leerPM1 = digitalRead(PM1);
pararMotor2();
delay(1000);
desplazamientoizquierdaMotor();
delay(2000);
pararMotor();
delay(1000);
bajarMotor1();
delay(2000);
detenerMotor1();
delay(1000);
}
Serial.println("Saliste del motor");
delay(5000);
}

Primero, edita tu post utilizando tags </> para el código.
Tu problema es bastante común, no puedes hacer programas complejos con delays. Cuando se esta ejecutando un delay, ignora casi todo lo que sucede alrededor. Por eso cuando presionas un pulsador y se ejecutando un delay, no pasa nada. Y tu código es todo delay.

Puedes intentar arreglarlo, pero te enfrentarías al mismo problema con cualquier modificación. Intenta empezar nuevamente, utilizando millis()

En principio edita tu post y pon el código según las Normas del foro.

Los problemas que veo en tu código son:
Lees 2 veces el botón, la primera estaría bien porque inicia la secuencia pero la segunda detiene todo salvo que mantengas el botón pulsado o lo pulses nuevamente.
Usas delay() en el cuerpo principal del loop y también en cada rutina. O los usas en un lado o los usas en otro, sino los tiempos no coinciden con lo que necesitas porque se suman.

Aclaremos que usando delay() esta secuencia se puede hacer pero no pretendas hacer más cosas mientras tanto porque no vas a poder, para eso hay que manejarlo con millis().

Saludos

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.