sketch para dejar leds encendidos

Hola amigos, quisiera saber algun sketch para dejarun led encendido en arduino, es decir que parpadee una vez y se quede encendido. al ir en el void loop se reinicia siempre la secuencia…
y necesito que la secuencia se haga, unicamente cuando se presione un pulsador…
aun no tengo el sketch del pulsador. pero el de los leds, lo tengo asi: lo tengo con analogwrite, porque esta en pin pwm, para poder variar un poco la intensidad.

int LED=3;
int i;

void setup(){
 pinMode(LED, OUTPUT);
 Serial.begin(9600);
 analogWrite(LED, 0);  
}

void loop(){

 while(0<1){
     analogWrite(LED, 150);     
     delay(300);
     analogWrite(LED, 0);
     delay(600);
     analogWrite(LED, 255);
     delay(5000);   //en esta parte deberia quedarse encendido...por eso esta en 5000
    
   }      
 }

quepodria hacer para hacerlo que quede encendido?..
Gracias

avatar9015:
quepodria hacer para hacerlo que quede encendido?..

Colocar esto al final del setup:

analogWrite(LED, 150);     
delay(300);
delay(600);
analogWrite(LED, 255);

Y dejar loop vacío o haciendo otra cosa; de lo contrario no hacemos nada diferente.

PD: código entre etiquetas generadas por </> si no es mucha molestia…

Hola.

Otra version del sketch sería:

const byte LED=3;
const byte pinBoton=4;   // Pin de ejemplo
boolean pulsado=false;    // Flag para "un solo uso"
int i;

void setup()
{
  pinMode(LED, OUTPUT);
  pinMode(pinBoton, INPUT_PULLUP);  // Atencion conectar el pulsador a GND
  Serial.begin(9600);
  analogWrite(LED, 0); 
}

void loop()
{

    if(!pulsado && !digitalRead(pinBoton))  // Suponiendo que boton pulsado == LOW
    {
        analogWrite(LED, 150);     
        delay(300);
        analogWrite(LED, 0);
        delay(600);
        analogWrite(LED, 255);
//        delay(5000);   //en esta parte deberia quedarse encendido...por eso esta en 5000
        pulsado = true;   // No volveremos a repetir esto hasta que pulsado == false
    } 

    // Hacer otras cosas,....    
}

Solo se ejecturá una vez cuando pulses el boton. Luego quedará encendido para siempre.

La única forma de reiniciarlo es volver a hacer <pulsado = false>, cosa que, si necesitas, puedes hacer mas adelante cuando se den determinadas condiciones (por ejemplo un segundo pulsador activo).

Saludos.

La idea que propones avatar9015 tiene el inconveniente que tu pulsador solo será atentido cada vez que tu terminas el ciclo del led o sea

if(!pulsado && !digitalRead(pinBoton))  // Suponiendo que boton pulsado == LOW
    {
        analogWrite(LED, 150);     
        delay(300);
        analogWrite(LED, 0);
        delay(600);
        analogWrite(LED, 255);
//        delay(5000);   //en esta parte deberia quedarse encendido...por eso esta en 5000
        pulsado = true;   // No volveremos a repetir esto hasta que pulsado == false
    }

900 mseg x una parte y el retardo que quieras ponerlo por otra. Suponiendo los 5 seg sugeridos por Alfaville (que solo son un ejemplo) imagina esperando 6 segundos a cada accion del pulsador.

La solucion es reemplazar todo por millis().

Hola Avatar9015,

desde mi punto de vista no hace falta introducir la última parte dentro de la sentencia while; sería más fácil así:

int LED=3;
int i = 0;

void setup(){
  pinMode(LED, OUTPUT);
  Serial.begin(9600);
  analogWrite(LED, 0);  
}

void loop(){

while(i<1){
      analogWrite(LED, 150);     
      delay(300);
      analogWrite(LED, 0);
      delay(600);
      i++  /*como int i = 0, en la siguiente comprobación del while, la condición no se cumple y solo
               parpadea una vez. Después solo dejará el LED encendido*/
    }

analogWrite(LED, 255);
         
  }

Espero que te sirva!