Arduino Forum

International => Italiano => Generale => Topic started by: filomeni on Mar 31, 2019, 10:12 pm

Title: initializer fails to determine size of...
Post by: filomeni on Mar 31, 2019, 10:12 pm
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
Code: [Select]
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.
Code: [Select]


#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
Title: Re: initializer fails to determine size of...
Post by: SukkoPera on Apr 01, 2019, 07:46 am
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?
Title: Re: initializer fails to determine size of...
Post by: filomeni on Apr 01, 2019, 10:09 pm
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.
Title: Re: initializer fails to determine size of...
Post by: SukkoPera on Apr 01, 2019, 10:18 pm
Immagino che la libreria sia questa (http://www.rinkydinkelectronics.com/library.php?id=73).

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

Code: [Select]
Time getTime();

Dove Time è una classe così fatta:

Code: [Select]
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.)
Title: Re: initializer fails to determine size of...
Post by: pgiagno on Apr 02, 2019, 08:56 am
Immagino che la libreria sia questa (http://"http://\"http://\\"http://www.rinkydinkelectronics.com/library.php?id=73"").
Sukko, mi permetto di correggere il link


Immagino che la libreria sia questa (http://www.rinkydinkelectronics.com/library.php?id=73).


Ciao,
P.
Title: Re: initializer fails to determine size of...
Post by: SukkoPera on Apr 02, 2019, 09:49 am
Erm, sì, corretto anch'io, grazie :).