Bueno, este es un sistema para una maquina de pegado que funciona con 2 botones que se deben presionar hasta que esta se cierre, una ves sucede esto comienza un proceso que solo se puede interrumpir por un botón de emergencia que debe de abrir toda la maquina.
Mi problema es que una ves entro en este proceso no se como estar verificando en paralelo si este botón esta presionado o no. les dejo el código.
// Constantes
const int SComienzo = 4;
const int SFin = 5;
const int SArriba = 6;
const int EB = 7;
const int Bu1 = 8;
const int Bu2 = 9;
const int R1 = 10;
const int R2 = 11;
//Variables
int pv=0; //primera ves que escribe opciones y tiempo
int SComienzoState=0;
int SFinState=0;
int Bu1State = 0;
int Bu2State = 0;
int EBState = 0;
int SArribaState = 0;
int T1=5000;
int T2=5000;
void setup() {
Serial.begin(9600);
// Rele Pins
pinMode(R1, OUTPUT);
pinMode(R2, OUTPUT);
// Button Pins
pinMode(Bu1, INPUT);
pinMode(Bu2, INPUT);
pinMode(EB, INPUT);
// Sensor Pins
pinMode(SArriba, INPUT);
pinMode(SComienzo, INPUT);
pinMode(SFin,INPUT);
}
void loop() {
// Lectura de botones
LeoBotones();
if (EBState == LOW){
if ((Bu1State == HIGH) && (Bu2State == HIGH)){ //Botones Precionados
ejecutar();
pv=0;
}
else //No hay botones Precionados
{
if (pv==0){
Serial.println("1-Tiempos");
Serial.println("2-Opciones");
pv=1;
}
}
}
else{
Serial.println("Emergencia");
pv=0;
}
}//Fin Loop
void ejecutar() {
LeoBotones();
//Variables
int pv1=0;
while((Bu1State == HIGH) && (Bu2State == HIGH)&&(EBState==LOW)){
LeoBotones();
if (pv1==0){
Serial.println("Comenzando Ejecucion");
pv1=1;
}
LeoSensores(); //leo los sensores de contacto
digitalWrite(R2,HIGH); //Entra hasta llegar al fin
delay(100);
if (SFinState==HIGH){
Serial.println("Ejecutando");
digitalWrite(R1,HIGH); //Si esta en el Fin Cierra y delay
delay(T1);
Serial.println("Abriendo y sacando");
AbreMaquina();
AlComienzo();
Serial.println("Cerrando");
digitalWrite(R1,HIGH); // Cierro y delay
delay(T2);
Serial.println("Abriendo");
AbreMaquina();
Serial.println("Termino");
}//Termina Ciclo
}//Botones Sueltos
Serial.println("Se Salio, Sacando");
AlComienzo();
}//Fin Ejecutar
void AbreMaquina(){
while(SArribaState==LOW){ //Mientras no este Abierto se queda aca y abre
digitalWrite(R1,LOW);
LeoSensores();
}
}//Fin AbreMaquina
void AlComienzo(){
while(SComienzoState==LOW){ //Mientras no este en el comienzo se queda aca y saca
digitalWrite(R2,LOW);
LeoSensores();
}
}//Fin AlComienzo
void LeoSensores(){
SArribaState = digitalRead(SArriba);
SFinState = digitalRead(SFin);
SComienzoState = digitalRead(SComienzo);
}//Fin LeoSensores
void LeoBotones() {
Bu1State = digitalRead(Bu1);
Bu2State = digitalRead(Bu2);
EBState = digitalRead(EB);
}//Fin LeoBotones
Mi problema es dentro de el proceso Ejecutar dentro del If que verifica si SFin esta activado que es un sensor de cerrado de la maquina.
Como hago para que dentro del proceso que esta ahí en paralelo verifique mi botón de emergencia?
Alguna idea?