este es el codigo, me gustaria eliminar todos los delays, es muy sencillo pero necesito aprender a usar los millis para poder hacer otra parte de mi codigo, que seria que si el estadoActivacion =0; se desactive todo y un buzzer intermitente se accione, y cuando lo reactive,se desactive el buzzer.
si hago eso del buzzer con un delay de 1000, al accionar tengo que presionar varias veces hasta atinarle al termino de un delay.
espero me entiendan.
const int LedON =12;
const int Seguridad =9;
const int Arranque =10;
const int Cambio =11;
const int Buzzer =8;
const int Variable =4;
const int Activacion =1;
const int SW1=2;
const int SW2=3;
int estadoActivacion =0;
int estadoanteriorActivacion =0;
int estadoSW1 =0;
int estadoanteriorSW1 =0;
int estadoSW2 =0;
int estadoanteriorSW2 =0;
int estadoSeguridadSW1 =0;
int estadoSeguridadSW2 =0;
int estadoInicial=0;
int estadoVariable=0;
void setup(){
pinMode (Seguridad , OUTPUT);
pinMode (Arranque , OUTPUT);
pinMode (Cambio , OUTPUT);
pinMode (Buzzer , OUTPUT);
pinMode (LedON , OUTPUT);
pinMode (Activacion,INPUT);
pinMode (SW1,INPUT);
pinMode (SW2,INPUT);
pinMode (Variable,INPUT);
}
void loop(){
estadoActivacion= digitalRead (Activacion);
if(estadoActivacion==HIGH){
estadoInicial = 1 - estadoInicial;
delay (20);
}
estadoActivacion= estadoanteriorActivacion;
if (estadoInicial==0){
digitalWrite (LedON,LOW);
digitalWrite (Arranque,LOW);
delay(300);
digitalWrite (Seguridad,LOW);
delay(300);
digitalWrite (Cambio,LOW);
estadoInicial=0;
}
else {
digitalWrite (LedON,HIGH);
digitalWrite (Seguridad,HIGH);
delay(500);
digitalWrite (Arranque,HIGH);
delay(500);
}
estadoSW1= digitalRead (SW1);
estadoActivacion= digitalRead (Activacion);
if (estadoInicial==HIGH)
if(estadoSW1==HIGH){
estadoSeguridadSW1 = 1 - estadoSeguridadSW1;
delay (20);
}
estadoSW1 = estadoanteriorSW1;
if (estadoSeguridadSW1==1){
digitalWrite (Arranque,LOW);
delay(300);
digitalWrite (Seguridad,LOW);
delay(300);
digitalWrite (Cambio,LOW);
delay(300);
digitalWrite (Seguridad,HIGH);
delay(300);
digitalWrite (Arranque,HIGH);
delay(300);
estadoSeguridadSW1=0;
estadoSW2=0;
}
estadoSW2= digitalRead (SW2);
estadoActivacion= digitalRead (Activacion);
if (estadoInicial==HIGH)
if(estadoSW2==HIGH) {
estadoSeguridadSW2 = 1 - estadoSeguridadSW2;
delay (20);
}
estadoSW2= estadoanteriorSW2;
if (estadoSeguridadSW2==1){
digitalWrite (Arranque,LOW);
delay(300);
digitalWrite (Seguridad,LOW);
delay(300);
digitalWrite (Cambio,HIGH);
delay(300);
digitalWrite (Seguridad,HIGH);
delay(300);
digitalWrite (Arranque,HIGH);
delay(300);
estadoSeguridadSW2=0;
estadoSW1=0;
}
}
Alfaville:
Hay que manejar con cuidado las interrupciones y <delay()> o <millis()>
Por ejemplo delay() bloquea las interrupciones durante una gran parte de su funcionamiento.
Algo similar le ocurre a <millis()>.
Y ademas ninguna de las dos funciona dentro de una rutina de atencion a la interrupcion (ISR).
Quizás si pusieras el código podriamos estudiar otras alternativas.
Alfaville:
Hay que manejar con cuidado las interrupciones y <delay()> o <millis()>
Por ejemplo delay() bloquea las interrupciones durante una gran parte de su funcionamiento.
Algo similar le ocurre a <millis()>.
Y ademas ninguna de las dos funciona dentro de una rutina de atencion a la interrupcion (ISR).
Quizás si pusieras el código podriamos estudiar otras alternativas.
Alfaville:
Hay que manejar con cuidado las interrupciones y <delay()> o <millis()>
Por ejemplo delay() bloquea las interrupciones durante una gran parte de su funcionamiento.
Algo similar le ocurre a <millis()>.
Y ademas ninguna de las dos funciona dentro de una rutina de atencion a la interrupcion (ISR).
Quizás si pusieras el código podriamos estudiar otras alternativas.