Entiendo que eres nuevo y que estas comenzando pero esto
if (digitalRead (MarchaCa)==LOW);// marcha del programa
que sentido tiene? Arranca el programa y si MarchaCa no esta en HIGH no hace nada y en cada Loop lo mismo?
Jamás vi algo semejante.
Si quieres que algo detenga al joystick y todo lo que hace pues coloca todo el control del joystick dentro de la acción que buscas.
Lo mejor es que tu pulsador controle un flag y este flag controle el uso o no del joystick
Algo asi
if (digitalRead (Paro)==LOW) { //paro del led
digitalWrite (LEDOpera,LOW);
flag = false;
}
if (flag)
control_Joystick();
}
Código modificado completo
const byte MarchaCa = 2; // marcha de carretilla
const byte Paro = 3; // paro de carretilla
const byte LEDOpera = 8; // objetivo para que funcione esta led encendida
const byte enA = 9; // definir las variables de los motores
const byte in1 = 7;
const byte in2 = 6;
const byte enB = 10;
const byte in3 = 5;
const byte in4 = 4;
int motorASpeed = 0; // variables motor
int motorBSpeed = 0;
const byte joyVert = A0; // joystick vertical
const byte joyHori = A1; // joystick horizontal
int joyposVert = 0; // lectura del joystick vertical
int joyposHori = 0; // lectura del joystik en horizontal
bool flag = false;
void setup (){
pinMode (MarchaCa,INPUT);
pinMode (LEDOpera,OUTPUT);
digitalWrite (LEDOpera,LOW);
pinMode (enA,OUTPUT);//definimos como salidas las variables de
pinMode (in1,OUTPUT);
pinMode (in2,OUTPUT);
pinMode (enB,OUTPUT);//los motores A y B
pinMode (in3,OUTPUT);
pinMode (in4,OUTPUT);
digitalWrite (enA,LOW);//para el motorA al principio
digitalWrite (in1,HIGH);
digitalWrite (in2,LOW);
digitalWrite (enB,LOW);//para el motorB al principio
digitalWrite (in3,HIGH);
digitalWrite (in4,LOW);
}
void loop(){
if (digitalRead(MarchaCa)==LOW) { // marcha del programa
flag = true;
delay (1000); // espera antes de enceder led
digitalWrite(LEDOpera,HIGH); // encedido de la led
}
if (digitalRead (Paro)==LOW) { //paro del led
digitalWrite (LEDOpera,LOW);
flag = false;
}
if (flag)
control_Joystick();
}
void control_Joystick() {
joyposVert = analogRead (joyVert);//estado del joystick
joyposHori = analogRead (joyHori);//estado del joystick
if (joyposVert < 550) { //en reposo en joyposVer
digitalWrite (in1,LOW);
digitalWrite (in2,LOW);
digitalWrite (in3,LOW);
digitalWrite (in4,LOW);
}
if (joyposVert <= 55) { //giro izquierda
digitalWrite (in1,LOW);
digitalWrite (in2,LOW);
digitalWrite (in3,LOW);
digitalWrite (in4,HIGH);
}
if (joyposVert >= 550) { //giro derecha
digitalWrite (in1,LOW);
digitalWrite (in2,HIGH);
digitalWrite (in3,LOW);
digitalWrite (in4,LOW);
}
if (joyposHori < 50) { //a delante
digitalWrite (in1,LOW);
digitalWrite (in2,HIGH);
digitalWrite (in3,LOW);
digitalWrite (in4,HIGH);
}
if (joyposHori >= 560) { //atrás
digitalWrite (in1,HIGH);
digitalWrite (in2,LOW);
digitalWrite (in3,HIGH);
digitalWrite (in4,LOW);
}
}
Hay cosas que no me gustan como el delay dentro de la primer acción pero te lo dejo a ti porque cuando presiones te quedas 1segundo sin poder deternerlo