Buenas noches, aun continuo trabajando en este proyecto, pero ahora tengo un inconveniente, espero me puedan ayudar por favor como la anterior ocasión.
Resulta que quiero encender 3 leds al mismo tiempo, pero que después de un segundo solo quede encendido uno solo de manera fija, hasta que vuelva a presionar el botón de on/off.
La verdad he intentado con el código de programación, pero no lo he logrado conseguir, para ello he utilizado las instrucciones 'while', 'for', 'break' y otras por el estilo, pero no he podido lograrlo, de antemano muchas gracias por la colaboración.
Tenemos un pulsador ON/OFF (pulsador o interruptor?), que al pulsarlo enciende 3 led durante 1 segundo y después se apagan 2 y permanece el 3º hasta que se pulse de nuevo ON/OFF que se apaga todo.
byte Pulsador = 1; // Pin pulsador
byte Led[] = {2,3,4}; // Pines led
bool EstadoPulsador = false; // Estado del pulsador
byte EstadoLeds = 0; // 0 = Todo apagado, 1 = Todo encendido, 2 = 1 encendido
unsigned long aMillis = 0; // Para controlar desborde en millis()
unsigned long DemoraApagar = 0; // Demora para apagar los 2 primeros led
void setup()
{
pinMode(Pulsador, INPUT); // Establecer pin de pulsador como entrada
for (int x = 0; x < 3; x++)
{
pinMode(Led[x], OUTPUT); // Establecer pinees de led como salida
digitalWrite(Led[x], LOW);
}
}
void loop()
{
aMillis = millis(); // Para controlar el desborde de millis()
EstadoPulsador = digitalRead(Pulsador);
if (EstadoPulsador && EstadoLeds == 0) // Pulsador high y todo apagado
{
for (int x = 0; x < 3; x++) {digitalWrite(Led[x], HIGH);} // Encendemos los 3 led
EstadoLeds ++; // Pasamos a estado 3 encendidos
DemoraApagar = millis() + 1000; // Tiempo para apagar los led
}
else if (!EstadoPulsador && EstadoLeds > 0) // Pulsador low y maniobra iniciada
{
EstadoLeds = 0;
DemoraApagar = 0;
for (int x = 0; x < 3; x++) {digitalWrite(Led[x], LOW);} // Apagamos los 3 led
}
if (EstadoLeds == 1 && millis() > DemoraApagar) // · led encendidos y transcurrio timepo para apagar los 2 primeros
{
EstadoLeds++; // Pasa<mos estado a 1 encendido
for (int x = 0; x < 2; x++) {digitalWrite(Led[x], LOW);} // Apagamos los 2 led
DemoraApagar = 0;
}
if (aMillis > millis() && DemoraApagar > 0) // Milis() ha y lo estamos usando
{
DemoraApagar = DemoraApagar - aMillis + millis(); // Nuevo valor para el control
}
}