Hola buen dia Estimados, ¿ Me podrían ayudar con mi código? quisiera saber si me pueden orientar para poder hacer un programa para que haga lo siguiente:
Encender 3 leds apretando y soltando un pulsador1 y apagando los 3 leds pulsando y soltando un pulsador 2. Que cuando se enciendan los led tengan un delay de 500 ms y que parpadeen hasta presionar stop.
Estoy recién comenzando con el arduino y apreciaría mucho su conocimiento. He tenido unos problemas con mi código porque no me permite detener los leds. Estaré atento a sus comentarios.Saludos Cordiales.
int boton1 = 8;
int boton2 = 7;
int led1 = 2;
int led2 = 3;
int led3 = 4;
void setup() {
pinMode(boton1,INPUT);
pinMode(boton2,INPUT);
pinMode(led1,OUTPUT);
pinMode(led2,OUTPUT);
pinMode(led3,OUTPUT);
}
int estado=digitalRead(boton1);
int estado2=digitalRead(boton2);
void loop() {
estado=digitalRead(boton1);
if (estado==LOW){
digitalWrite(led1,HIGH);
digitalWrite(led2,HIGH);
digitalWrite(led3,HIGH);
delay(500);
digitalWrite(led1,LOW);
digitalWrite(led2,LOW);
digitalWrite(led3,LOW);
delay(500);
estado2=digitalRead(boton2);
if (estado2==LOW){
digitalWrite(led1,LOW);
digitalWrite(led2,LOW);
digitalWrite(led3,LOW);
}
}
}
int estado=digitalRead(boton1);
int estado2=digitalRead(boton2);
fuera del loop y del setup, eso debe ir dentro del loop, 2.- en el void setup, configuras los botones como INPUT, pero en el loop, pones esto: if (estado==LOW), entonces cuando el boton este sin presionar se ejecutara lo que esta dentro de la condicional, aqui tienes dos opciones, pones el boton como PULL-UP y dejas esa linea igual o si usas el boton como pull_down, tienes que cambiar la linea a HIGH, ahora si quieres que los led se queden destellando usa un flag
prueba esto;
int boton1 = 8;
int boton2 = 7;
int led1 = 2;
int led2 = 3;
int led3 = 4;
bool flag=false;
void setup() {
pinMode(boton1,INPUT_PULLUP);
pinMode(boton2,INPUT_PULLUP);
pinMode(led1,OUTPUT);
pinMode(led2,OUTPUT);
pinMode(led3,OUTPUT);
}
void loop() {
int estado=digitalRead(boton1);
int estado2=digitalRead(boton2);
if (estado==LOW)
flag=true;
if (estado2 == LOW)
flag=false;
if(flag){ // es lo mismo que if(flag==true)
digitalWrite(led1,HIGH);
digitalWrite(led2,HIGH);
digitalWrite(led3,HIGH);
delay(500);
digitalWrite(led1,LOW);
digitalWrite(led2,LOW);
digitalWrite(led3,LOW);
delay(500);
}
if(!flag){ // es lo mismo que if(flag==false)
digitalWrite(led1,LOW);
digitalWrite(led2,LOW);
digitalWrite(led3,LOW);
}
}
Se puede mejorar, pero lo deje casi igual al tuyo para que veas las diferencias, y ojo, los botones los configure como pull-up entonces conecta un lado del boton al pin del arduino y el otro a gnd
Muchas gracias me ha sido de mucha utilidad la explicación, lo he probado usando el simulador proteus y funciona. El único detalle es que tengo que presionar un poco mas de tiempo el pulsador de stop para que se detenga(detalles mínimos). Me quedaron claros los errores que cometí en el principio, estudiaré bien el código para mejorarlo. Mil gracias RIG por compartir tu conocimiento...
único detalle es que tengo que presionar un poco mas de tiempo el pulsador de stop para que se detenga
El problema son los delay, por eso te dije que el programa se puede mejorar, date una vuelta por aquí y mira los tutoriales que tratan el tema sobre millis() para que dejes de usar delay