Me presento y pregunta - delay Vs Millis

Hola mi nombre es Marcos y estoy empezando en el mundo arduino. Y quiero dar las gracias a los cradores de este foro, por que creo que sin el muchos de los problemas que tenemos con arduino no se solventarian.
Queria hacer una pregunta a ver si me la pod茅is ayudar, se que esta mas que hablado...pero no me entero :disappointed_relieved:.
He conectado una tira de led al arduino y quiero saber si se puede sustituir y como, los delay. es decir
ense帽o un trozo de c贸digo para ver de lo que hablo.

Hay alguna forma de sustituir los delay por millis() para que siga ejecutandose el c贸digo a la vez de que hace el FOR y no se bloque la hora?
Con lo que tengo ahora y veis, cuando se ejecuta el loop() (l贸gicamente) muestra en pantalla lcd la hora minutos y segundos pero cuando
llega al for, la hora deja de funcionar y se bloquea, hasta que el delay acaba, no se si me explico bien, se que se puede sustituir los delay por millis....pero no se que como meter el c贸digo
he visto por ahi tutos pero no soy capaz...me podr铆ais decir como y donde poner los mills??

MIL GRACIAS
PARTE DEL CODIGO A CONTINUACION

C贸digo:

//falta los include (ya lo se)
void setup()
{

pinMode(ledBlanco, OUTPUT);
lcd. clear();
Serial.begin(9600); // Establece la velocidad de datos del puerto serie
Wire.begin(); // Establece la velocidad de datos del bus I2C
RTC.begin(); // Establece la velocidad de datos del RTC
lcd.begin(16, 2); //Configuramos el numero de caracteres y filas a utiliza
}

void loop()
{
if (now.month()==1 && now.day () >=1 && now.day () <=15 && now.hour()==8 && now.minute()==35)
{

lcd.setCursor(3,1);
// DateTime now = RTC.now();
lcd.print(now.hour(), DEC);
lcd.print('/');
lcd.print(now.minute(), DEC);
lcd.print('/');
lcd.print(now.second(), DEC);

for (int brillo=0; brillo<255; brillo++) {
analogWrite(ledBlanco, brillo);
delay (4615);}

lcd.setCursor(3,1);
// DateTime now = RTC.now();
lcd.print(now.hour(), DEC);
lcd.print('/');
lcd.print(now.minute(), DEC);
lcd.print('/');
lcd.print(now.second(), DEC);

analogWrite(ledBlanco, 255);
delay (33480000);

lcd.setCursor(3,1);
// DateTime now = RTC.now();
lcd.print(now.hour(), DEC);
lcd.print('/');
lcd.print(now.minute(), DEC);
lcd.print('/');
lcd.print(now.second(), DEC);

for (int brillo=255; brillo>0; brillo--) {
analogWrite(ledBlanco, brillo);
delay (6923);
analogWrite(ledBlanco, 0);}

Hola kynacom

Los millis mide mili segundos (mil茅sima de segundo). No se que te puede aportar. Y ten茅 presente que el contador llega al m谩ximo y vuelve a 0 cada 50 d铆as.

La idea es que avance el c贸digo y chequear cada tanto como va millis(); y si llego a x valor hacer algo.

Otra manera de programarlo, mejor pero mas complicada, es con interrupciones. Se genera la interrupci贸n, (le dec铆s al procesar cuando tiene que interrumpir), y generas la funci贸n que llama la interrupci贸n. De esta manera el c贸digo sigue normalmente hasta ese momento.

Ah, que largo es tu despertador, para probar el c贸digo yo lo har铆a de segundos.

Saludos.

Muchas gracias por la respuesta. No soy capaz de hacerlo, pero como digo mil gracias por ella.

Y algo as铆?

boolean subirbrillo = false;
unsigned long tinicio; // momento en que empieza a subir el brillo

void loop() {
...
if (x) {
// que suba el brillo
subirbrillo = true;
tinicio = millis();
}

.....

if (subirbrillo == true) {
brillo = ( millis() - tinicio ) / 2000; // sube un punto el brillo cada 2000 mili segundos)
if (brillo > 255) {
subirbrillo = false;
brillo = 255:
}
}

Lo puse (sin probar) como una funci贸n aparte, que no detiene el loop.
Cuando se llega al momento x pongo a la variable subirbrillo en true.
En el loop pongo un bloque condicional que da el brillo en funci贸n del tiempo pasado. Y cuando brillo llega a 255 hago subirbrillo false y no entra mas.

Se puede de mil maneras, esta capaz que sirve.

Saludos