Muy bien, lo pude hacer, hice de 2 formas(podría haber echo una tercera pero no me salio con millis()):
int entrada = 2;
int led = 3;
int estadoPulsador;
bool paso1 = false;
bool paso2 = false;
void setup() {
Serial.begin(9600);
pinMode(entrada,INPUT_PULLUP);
pinMode(led, OUTPUT);
digitalWrite(led, LOW);
}
void loop() {
estadoPulsador = digitalRead(entrada);
digitalWrite(led, LOW);
if (estadoPulsador == HIGH && paso1 == false){
digitalWrite(led, HIGH);
delay(100);
digitalWrite(led, LOW);
delay(500);
paso1=true;
paso2=true;
}
if (estadoPulsador == LOW && paso2==true){
digitalWrite(led, HIGH);
delay(100);
digitalWrite(led, LOW);
delay(500);
paso1=false;
paso2=false;
}
}
Este es el primer codigo que pude hacer funcionar pero utiliza delay, aca dejo como funciona debia funcionar el programa.
prueba del programa en tinkercard
Y el problema con este programa es que al principio manda una señal de estado alto y nose porque(son los delay pero bueno).
El segundo programa es lo mismo pero con una libreria:
#include <Temporizador.h>
Temporizador temp;
Temporizador temp2;
Temporizador temp3;
Temporizador temp4;
int entrada = 2;
int led = 3;
int estadoPulsador;
bool paso1 = false;
bool paso2 = false;
int contador;
void setup() {
pinMode(entrada,INPUT_PULLUP);
pinMode(led, OUTPUT);
temp.temporizar(0,0,0,0,10);
temp2.temporizar(0,0,0,0,200);
temp3.temporizar(0,0,0,0,10);
temp4.temporizar(0,0,0,0,100);
}
void loop() {
estadoPulsador = digitalRead(entrada);
if (estadoPulsador == HIGH && paso1 == false){
temp.temporizar(0,0,0,0,10);
contador = 1;}
if(contador == 1){
if(temp.completado()){
digitalWrite(led, HIGH);
temp2.temporizar(0,0,0,0,200);
contador = 2;}}
if(contador == 2){
if(temp2.completado()){
digitalWrite(led, LOW);
paso1=true;
paso2=true;
contador = 3;
}}
if (estadoPulsador == LOW && paso2==true){
temp3.temporizar(0,0,0,0,10);
contador = 4;}
if(contador == 4){
if(temp3.completado()){
digitalWrite(led, HIGH);
temp4.temporizar(0,0,0,0,100);
contador = 5;}}
if(contador == 5){
if(temp4.completado()){
digitalWrite(led, LOW);
paso1=false;
paso2=false;
contador = 5;
}}
}
El problema con este es cuando presiono muy rápido el botón y lo suelto se queda el led prendido.
Acá el link de la librería utilizada:temporizador
Intente hacerlo con millis() pero los tiempos se correspondían y el programa no funcionaba
lastima que lo borre, mas tarde lo voy a intentar de nuevo y lo paso aca.