[ayuda] arduino - Pulsador, LEDS y parpadeos.

Hola!
estoy intentando hacer una configuracion que veo algo compleja.
La primera idea es:
3 pulsadores, 1 Led azul y un Led rojo
Si se pulsa una vez el pulsador 1 se enciende el led azul en modo fijo
Si se pulsa una vez el pulsador 2 se enciende el led azul en parpadeo.
y el 3º pulsador seria para encender y apagar el led rojo

tengo este codigo para el 3º caso, para el Led rojo

int pulsador1 = 7;
int led = 16;
int estado= LOW;

void setup(){
pinMode(pulsador1, INPUT);
pinMode(led, OUTPUT);
digitalWrite(led, HIGH);
}
void loop(){
while(digitalRead(pulsador1)==LOW);
estado = digitalRead(led);
digitalWrite(led, !estado);
while(digitalRead(pulsador1)==HIGH);

}


pero el otro caso me parece un poco complicado de hacer, se me ha ocurrido otro caso mas facil
con 2 Pulsadores y 2 LED, uno rojo y otro azul
1º Pulsador cambiar entre Led azul encendido o parpadeando
2º Pulsador cambiar entre Led rojo encendido o apagado.
y regular el encendido completo con un interruptor directamente desde la alimentacion.

he trasteado algo con los Millis, pero no se como hacerlo todo en un mismo codigo, y hacer las "subrutinas" con los pulsadores.

algun consejo?

al final he simplificado el circuito, y lo unico que necesitaria es cambiar entre parpadeo (30) y fijo de un LED
con un pulsador y 1 led.
me estoy volviendo loco
Una manera podría ser con una variable estática dentro del loop que indique si estás en modo parpadeo o modo encendido:


int ledState = LOW;
const long interval = 1000;
unsigned long previousMillis = 0;

void loop(){
    static int modo;
    unsigned long currentMillis = millis();
    buttonState1 = digitalRead(buttonPin1);
    buttonState2 = digitalRead(buttonPin2);
    if (buttonState1 == HIGH) {
        modo = 0;
    }
    if (buttonState2 == HIGH) {
        modo = 1;
    }

   if (modo == 0){
       // ...CODIGO/FUNCION PARPADEO
       if (currentMillis - previousMillis >= interval) {
           // save the last time you blinked the LED
           previousMillis = currentMillis;

          // if the LED is off turn it on and vice-versa:
          if (ledState == LOW) {
              ledState = HIGH;
          } else {
              ledState = LOW;
          }

          // set the LED with the ledState of the variable:
          digitalWrite(ledPin, ledState);
      }
   }
   elseif (modo == 1){
         ...CODIGO/FUNCION ENCENDIDO
   }
}
1 respuesta