initializer fails to determine size of...

Ho preso un esempio fatto da Guglielmo e l’ho leggermente modificato per il mio programma, ho l’esigenza di “splittare” la data rilevata dalla funzione rtc.getDateStr() per poi convertirla in UnixTime, la finalità è poi di fare delle operazioni seguenti per un allarme sveglia.
Riscontro due problemi, il primo è che sostituendo alla data la funzione getDateStr mi restituisce l’errore in oggetto al post, Il secondo problema è che il controllo dovrei esguirlo in loop, in quanto il confronto deve essere con un tempo impostato e il tempo rilevato in “real time”.
Quindi ho provato a spostare in blocco su “void loop()” ma il funzionamento non è più corretto!
Ecco il codice.

#include <string.h>
#include <DS3231.h>

// Init the DS3231 using the hardware interface
DS3231  rtc(SDA, SCL);

char elemento[3][5];
byte i;

char* elementoSeparatore  = ".";
char* pElemento           = NULL;
char* pProssimoElemento   = NULL;
int var1;
int var2;
int var3;
Time t;
String a;
void setup() {
  rtc.begin();
  // solo per precauzione per eventuali problemi con il bootloader inserisco un delay iniziale
  delay(1000);
  //
 a=rtc.getDateStr();
 
 char stringaDaDividere[] = a;//se metto una data esempio 12.06.2019 al posto di "a" funziona correttamente
  Serial.begin(115200);
  Serial.print(F("Stringa da suddividere: "));
  Serial.println(stringaDaDividere);
  Serial.print(F("Carattere separatore: "));
  Serial.println(elementoSeparatore);
  Serial.println();
  //
  // recupera il primo elemento di stringaDaDividere ...
  pElemento = strtok_r(stringaDaDividere, elementoSeparatore, &pProssimoElemento);
  strcpy(elemento[0], pElemento);
  //
  // ... e poi recupera i successivi (nota il NULL al posto di stringaDaDividere).
  for (i=1; i<3; i++) {
    pElemento = strtok_r(NULL, elementoSeparatore, &pProssimoElemento);
    strcpy(elemento[i], pElemento);
  }
  //
  // divide gli elementi della data
  Serial.println(F("Elementi separati ..."));
  for (i=0; i<3; i++) {
     Serial.print(F("var"));
     Serial.print((i+1), DEC);
     Serial.print(F("="));
     Serial.println(elemento[i]);
     t.year= var3;
     t.mon= var2;
     t.date=var1;
     Serial.println(rtc.getUnixTime(t));
  }
  
}

void loop() {

}

Grazie in anticipo Maurizio Filomeni

Tirare fuori la data in formato stringa per poi estrarne le singole componenti è un ottimo metodo per complicarsi la vita inutilmente.

Sicuramente la libreria che usi per l’RTC mette a disposizione metodi per avere direttamente i singoli campi di data e ora. Quale stai usando?

Grazie per la risposta.
Bhe! ricerche ne ho fatte, la libreria l'ho aperta, ma non c'è nulla che mi esploda le singole parti della data... e tantomeno la funzione allarme che cerco di ricavare... La libreria è questa DS3231 ed è dichiarato che la funzione sveglia non è presente.

Immagino che la libreria sia questa.

Se è così, evidentemente non hai visto il metodo:

Time	getTime();

Dove Time è una classe così fatta:

class Time
{
public:
	uint8_t		hour;
	uint8_t		min;
	uint8_t		sec;
	uint8_t		date;
	uint8_t		mon;
	uint16_t	year;
	uint8_t		dow;


	Time();
};

(Non c'era alcun bisogno che fosse una classe, considerala pure una struct.)

SukkoPera:
Immagino che la libreria sia questa.

Sukko, mi permetto di correggere il link

Immagino che la libreria sia questa.

Ciao,
P.

Erm, sì, corretto anch'io, grazie :).