LED intermitente con una linea de codigo

//Programa: LED intermitente con una linea de codigo
//lrcvs, 19.03.24
//Valor minimo 1 segundo ON /OFF

void setup()
{
pinMode(13, OUTPUT);
}

void loop()
{
if ((millis()/1000) % 2 == 0){ digitalWrite(13,1);}else{ digitalWrite(13,0);}
}
void setup() {
  pinMode(13, OUTPUT);
}

void loop() {
  digitalWrite(13, millis() & 0x400 ? HIGH : LOW); 
}

:slight_smile:

1 Like

Ok, Muchas gracias.!
Tu codigo es mas perfecto y mas reducido.
Saluos

Para que solo quieres una linea?

¡Es divertido :slight_smile:

1 Like

Aproximadamente cada segundo:

void setup() {
  pinMode(13, OUTPUT);
}

void loop() {
  digitalWrite(13,(millis() /1024) & 1); 
}

Es más lento que hacer & 0x400 (Pero el optimizador debe eliminar la división de todos modos)

Así lo pensé, por eso usé una potencia de 2.

Una alternativa podría ser

(millis() >> 10)

Creo que para el compilador son equivalentes.

Sería interesante verificarlo a nivel código ejecutable.

Sí, el optimizador debe eliminar la división para reemplazarla por un desplazamiento a la derecha.

Solo de aburrido... :wink:

void setup() {
  pinMode(13, OUTPUT);
}

void loop() {
  digitalWrite(13,(bool)(millis() & 0x400)); 
}

Técnicamente puedes escribir todo el programa en la misma línea.

Pero creo que esta versión no cumple el requisito.

void setup(){pinMode(13,OUTPUT);} void loop(){digitalWrite(13,HIGH);delay(1000);digitalWrite(13,LOW);delay(1000);}

También es en una línea. :laughing:

Pero creo que se refiere a 1 sentencia. :thinking:

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.