Go Down

Topic: initializer fails to determine size of... (Read 221 times) previous topic - next topic

filomeni

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
Siamo qui per spiegare a chi sa meno e iparare da sa di più...

SukkoPera

#1
Apr 01, 2019, 07:46 am Last Edit: Apr 01, 2019, 07:47 am by SukkoPera
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?
"Code is read much more often than it is written, so plan accordingly. Design for readability."

Guida rapida a ESP8266: https://goo.gl/kzh62E

filomeni

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.
Siamo qui per spiegare a chi sa meno e iparare da sa di più...

SukkoPera

#3
Apr 01, 2019, 10:18 pm Last Edit: Apr 02, 2019, 09:48 am by SukkoPera
Immagino che la libreria sia questa.

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.)
"Code is read much more often than it is written, so plan accordingly. Design for readability."

Guida rapida a ESP8266: https://goo.gl/kzh62E

pgiagno

Immagino che la libreria sia questa.
Sukko, mi permetto di correggere il link


Immagino che la libreria sia questa.


Ciao,
P.

SukkoPera

"Code is read much more often than it is written, so plan accordingly. Design for readability."

Guida rapida a ESP8266: https://goo.gl/kzh62E

Go Up