RTC DS3231 - come leggere i valori dei minuti / ore in "void"?

ciao a tutti,
srivo per un quesito forse semplice, ma che mi sta dando dei problemi:
con arduino UNO e un un display LCD visualizzo correttamente l’ora esatta fornita dal RTC DS3231.
ora io vorrei che si accendesse un led ogni minuto, per 5 secondi, anche quando NON visualizzo l’ora sul display.
mi spiego meglio: sul loop void acquisisco il segnale di un pulsante che fa partire o meno i cicli “printTime” e printDate" per la scrittura su lcd.
quando il valore tm.Seconds è uguale a 0 mi accende il led, se tale valore supera 5 lo spegne.
fiunziona correttamente quando invio i dati all’LCD.
però se pigio il pulsante e interrompo “printTime” e printDate" il led non funziona, nonostante la condizione poc’anzi descritta sia su “void”.
è come se il valore del tempo me lo leggesse solo facendo partire “printTime”… da qui la richiesta: quali comandi usare per leggere le variabili di secondi, minuti ecc anche in “void”?
scusate forse può essere banale,
grazie mille
Tommaso

// Wire - Version: Latest 
#include <Wire.h>
#include <DS1307RTC.h>

// LiquidCrystal_PCF8574 - Version: Latest 

#include <LiquidCrystal_PCF8574.h>

LiquidCrystal_PCF8574 lcd(0x27);  // set the LCD address to 0x27 for a 16 chars and 2 line display

// pin pulsanti
#define bottone1 8
#define schermo 10
#define led 12

int P1 = 0;    // pulsante 1 associato allo schermo


void setup() {

    Serial.begin(9600);
  // setup monitor i2c
  lcd.begin(20, 4);
  lcd.clear();
  lcd.setBacklight(255);
  
  // setup pulsanti
  pinMode(bottone1,INPUT);
  pinMode(led,OUTPUT);
}

void loop(){
  
  // orologio

  tmElements_t tm;

    if (RTC.read(tm)) {
    if (tm.Second == 0)
    {
    digitalWrite(led,HIGH);
    }
    if (tm.Second >= 5)
    {
    digitalWrite(led,LOW);
    }
    }
    
    // pulsanti
    if (digitalRead(bottone1) == HIGH){
      P1 = P1+1;
      lcd.begin(20, 4);
      lcd.clear();
      }

    if (P1==2) {
      P1 = 0;
      }
      
    if (P1==0) {
      if (RTC.read(tm)) {
      printDate(5,1,tm);
      printTime(6,2,tm);  
      }                 
    }  

}


void printTime(int character,int line, tmElements_t tm)
{
  String seconds,minutes;
  lcd.setCursor(character,line);
  lcd.print(tm.Hour);
  lcd.print(":");
  if(tm.Minute<10)
  {
    minutes = "0"+String(tm.Minute);
    lcd.print(minutes);
  }else
  {
    lcd.print(tm.Minute);
  }
  lcd.print(":");
  if(tm.Second<10)
  {
    seconds = "0"+String(tm.Second);
    lcd.print(seconds);
  }else
  {
    lcd.print(tm.Second);
  }
}


void printDate(int character,int line, tmElements_t tm)
{
  lcd.setCursor(character,line);
  lcd.print(tm.Day);
  lcd.print("/");
  lcd.print(tm.Month);
  lcd.print("/");
  lcd.print(tmYearToCalendar(tm.Year));
}

Buonasera,
essendo il tuo primo post, nel rispetto del regolamento della sezione Italiana del forum (… punto 13, primo capoverso), ti chiedo cortesemente di presentarti IN QUESTO THREAD (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con molta attenzione tutto il su citato REGOLAMENTO ... Grazie. :slight_smile:

Guglielmo

P.S.: Ti ricordo che, purtroppo, fino a quando non sarà fatta la presentazione nell’apposito thread, nessuno ti potrà rispondere, quindi ti consiglio di farla al più presto. :wink:

scusa,
in realtà pensavo di star utilizzando un account già presente.
essendo anni che non scrivevo, probabilmente si era resettato il mio profilo
comunque cambiando il loop “void” così:

tmElements_t tm;

    if (RTC.read(tm)) {
      if ((tm.Second >= 0)&&(tm.Second < 5))
      {
      digitalWrite(led,HIGH);
      }
      else
      {
      digitalWrite(led,LOW);
      }
    }

funziona

non so se mettere [RISOLTO] sul thread: sicuramente forse potrete suggerirmi qualche miglioria

grazie

T