Hola a todos.
Estoy involucrado en un proyecto compuesto por un Arduino, tres LEDs y un botón.
El objetivo del sistema es que por cada vez que el botón se presiona, un LED debe encenderse y apagarse después de 4000 ms. Entonces al presionar una vez se enciende el primero, dos veces el segundo y finalmente al presionar tres veces el botón, el tercer led debe encenderse. Cada led debe apagarse después de 4000 ms desde que se encendió.
Cada vez que presiona el botón, tomo el tiempo transcurrido, lo almaceno en una variable y luego le digo a la tarjeta que después de 4000 ms, debe apagar el LED pero no me funciona. Tal vez no estoy comparando el tiempo adecuadamente, pero hasta ahora no me puedo imaginar otra forma de hacerlo.
Cualquier tipo de ayuda es bienvenida. Gracias de antemano!
Abajo está el esquema y el código. Además, pueden ver el proyecto en Autodesk Circuits.
int buttonPIN=2;
int L1=6;
int L2=5;
int L3=4;
int buttonPushCounter = 0;
int buttonState = 0;
int lastButtonState = 0;
unsigned long t1;
unsigned long t2;
unsigned long t3;
void setup()
{
pinMode(L1, OUTPUT);
pinMode(L2, OUTPUT);
pinMode(L3, OUTPUT);
pinMode(buttonPIN, INPUT);
Serial.begin(9600);
}
void one()
{
digitalWrite(L1,1);
}
void two()
{
digitalWrite(L2,1);
}
void three()
{
digitalWrite(L3,1);
}
void loop()
{
buttonState = digitalRead(buttonPIN);
unsigned long runtime=millis();
Serial.println(runtime);
if (buttonState != lastButtonState)
{
if (buttonState == HIGH)
{
buttonPushCounter++;
if(buttonPushCounter == 4)
{
buttonPushCounter = 1;
}
}
else
{
}
}
lastButtonState = buttonState;
switch(buttonPushCounter)
{
case 1:
one();
t1=runtime;
if (t1>=t1+4000)
{
digitalWrite(L1,0);
}
break;
case 2:
two();
t2=runtime;
if (t2>=t2+4000)
{
digitalWrite(L2,0);
}
break;
case 3:
three();
t3=runtime;
if (t3>=t3+4000)
{
digitalWrite(L3,0);
}
break;
}
}
