if senza interruzione di void loop

ciao, io devo fare un programma con all'interno un if però il problema è che quando parte l'if si ferma tutto il programma c'è un modo per farlo andare avanti sempre anche con l'if "acceso".
grazie

Ti ri-invitiamo a presentarti (dicci quali conoscenze hai di elettronica e di programmazione) qui: Presentazioni
e a leggere il regolamento: Regolamento

Non si capisce nulla della richiesta. Posta il tuo codice e spiega meglio.
Un if non blocca nulla, a meno che tu nell'if non metti qualcosa di bloccante. Senza info che possiamo dirti ?!

ciao, e scusa se non si capisce nulla.
io sto facendo un progetto con arduino per fare un orologio a torre con le lanciatte, per dare l'ora esatta ad arduino ho usato un RTC e praticamente tutte le volte che i secondi dell'orologio (RTC) arrivano a zero dovrei tenere acceso un relè per 3 secondi (per far muovere un motore).

if (future.second()==0){
digitalWrite(Pin, HIGH);
delay(3000);

il problema e che faccio visualizare l'ora anche su un dislay lcd e quando parte il relè praticamente per 3 secondi si ferma l'orario sul dislay.
come posso fare per risolvere questo problema?
spero che si capisca il mio problema
grazie.(se avete anche qualche altro suggerimento su come usare questo forum vi ringrazio).

il delay è bloccante per quei 3 secondi. devi usare la millis() ma anche cambiare in parte il programma.
guarda l'esempio blink (usa delay) e blinkwithoutdelay (usa millis) e confrontali.

questo è il mio programma e non riesco a inserire la funzione millis() mi potete dare un consiglio.

#include <LiquidCrystal.h>
#include <Wire.h>
#include "RTClib.h"
LiquidCrystal LCD (12, 11, 5, 4, 3, 2);
RTC_DS1307 RTC;
int Pin=10;
int pin1=8;


void setup () {
 LCD.begin(16, 2);
   Serial.begin(57600);
   Wire.begin();
   RTC.begin();
    pinMode(Pin, OUTPUT);
     pinMode(pin1, OUTPUT);
   

 if (! RTC.isrunning()) {
   Serial.println("RTC is NOT running!");
   // following line sets the RTC to the date & time this sketch was compiled
   // RTC.adjust(DateTime(__DATE__, __TIME__));
 }

}

void loop () {
   DateTime now = RTC.now();

   Serial.print(now.year(), DEC);
   Serial.print('/');
   Serial.print(now.month(), DEC);
   Serial.print('/');
   Serial.print(now.day(), DEC);
   Serial.print(' ');
   Serial.print(now.hour(), DEC);
   Serial.print(':');
   Serial.print(now.minute(), DEC);
   Serial.print(':');
   Serial.print(now.second(), DEC);
   Serial.println();

   Serial.print(" since 1970 = ");
   Serial.print(now.unixtime());
   Serial.print("s = ");
   Serial.print(now.unixtime() / 86400L);
   Serial.println("d");

   // calculate a date which is 7 days and 30 seconds into the future
   DateTime future (now.unixtime() + 7 * 86400L + 26);

   Serial.print(" now + 7d + 30s: ");
   Serial.print(future.year(), DEC);
   Serial.print('/');
   Serial.print(future.month(), DEC);
   Serial.print('/');
   Serial.print(future.day(), DEC);
   Serial.print(' ');
   Serial.print(future.hour(), DEC);
   Serial.print(':');
   Serial.print(future.minute(), DEC);
   Serial.print(':');
   Serial.print(future.second(), DEC);
   Serial.println();

   Serial.println();
   
 
      

   LCD.clear() ;
  
   LCD.print(future.hour() );
   LCD.print(":");
  
   LCD.print(future.minute());
   LCD.print(":");
  
   LCD.print(future.second());
   
  LCD.setCursor(0,2);
  
    LCD.print(now.day() );
   LCD.print("/");
  
   LCD.print(now.month());
   LCD.print("/");
  
   LCD.print(now.year());
   
   
    if (future.second()==0){    //lancette
    digitalWrite(Pin, HIGH);
    delay(3000);
   }
   else{
      digitalWrite(Pin, LOW);}
      
      if(future.hour()==12){       //suoneria
        if(future.minute()==00){
          if(future.second()==0){
            
            digitalWrite(pin1, HIGH);
            delay(3000);
            digitalWrite(pin1, LOW);
            delay(2000);
            
             digitalWrite(pin1, HIGH);
            delay(3000);
            digitalWrite(pin1, LOW);
            delay(2000);
            
             digitalWrite(pin1, HIGH);
            delay(3000);
            digitalWrite(pin1, LOW);
            delay(2000);
            
             digitalWrite(pin1, HIGH);
            delay(3000);
            digitalWrite(pin1, LOW);
            delay(2000);
            
             digitalWrite(pin1, HIGH);
            delay(3000);
            digitalWrite(pin1, LOW);
            delay(2000);
            
             digitalWrite(pin1, HIGH);
            delay(3000);
            digitalWrite(pin1, LOW);
            delay(2000);
            
             digitalWrite(pin1, HIGH);
            delay(3000);
            digitalWrite(pin1, LOW);
            delay(2000);
            
             digitalWrite(pin1, HIGH);
            delay(3000);
            digitalWrite(pin1, LOW);
            delay(2000);
            
             digitalWrite(pin1, HIGH);
            delay(3000);
            digitalWrite(pin1, LOW);
            delay(2000);}}}
            
 
   
   delay(1000);
}

ciao

ceccopesce:
... praticamente tutte le volte che i secondi dell'orologio (RTC) arrivano a zero dovrei tenere acceso un relè per 3 secondi (per far muovere un motore)...

Quindi praticamente tutte le volte che i secondi dell'orologio arrivano a tre devi spegnere il relè.

ciao
pippo72

E' proprio da riscrivere. Il concetto è di non avere neppure una delay, neppure quella a delay(1000) che ti serve solo per aggiornare non troppo spesso l'LCD.
Tutto deve essere fatto in base al conteggio di millis() confrontato con il valore precedentemente memorizzato della stessa.
Quando passano 1000 (un secondo) puoi aggiornare l'LCD
Quando second()==0 allora attivi il rele e "accendi" una variabile di stato a vero
Quando questa è vera verifichi se sono passati i famosi 3 secondi, se si spegni rele e la variabile (la metti a falso)

Qualcosa del genere (e per adesso TOGLI la parte // suoneria)
Nelle variabili globali aggiungi e modifica:

const byte Pin=10;
const byte pin1=8;
unsigned long waitRele=0;
int statoRele=0;
  if (future.second()==0)
  { digitalWrite(Pin, HIGH);
    //delay(3000);
    waitRele=millis();
    statoRele=HIGH;
  }
  if(statoRele==HIGH)  // sono in stato di controllo tempo del rele
  { if(millis()-statoRele>3000)   // passati i 3 secondi ?
    { statoRele=LOW;      // finito stato attesa tempo rele
      digitalWrite(Pin, LOW);
    }
  }

Anche quel delay(1000) è da togliere. Mi pare ti serva solo a far aggiornare LCD ogni secondo.
Anche lui deve avere un suo contatore esempio unsigned long timerLcd con un if che verifica se millis() meno lui supera 1000 allora aggiorni LCD e poi riassegni timerLcd=millis()

A che serve la variabile future ?

// calculate a date which is 7 days and 30 seconds into the future
DateTime future (now.unixtime() + 7 * 86400L + 26);

Perchè calcoli una data nel futuro ??
Hai già la data/ora attuali
DateTime now = RTC.now();