rieccomi.....
c'e' una cosa che mi sta facendo ammattire da 2 giorni (e 2 notti)....
Brevemente:
Si tratta di riportare su un vettore, la struttura di temp che sara' usata piu' in la', (dopo il deep sleep) per redigere una email con 6 righe....
imposto :
`typedef struct
{
int SoilMostx100;
char Hod[3];
char Mod[3];
char Dom[3];
char Moy[3];
char Year[5];
} record_type;
RTC_DATA_ATTR int XCiclo = 0;
RTC_DATA_ATTR record_type XRecord[5];
poi, dal loop, chiamo questa:
void ReadSensor() {
soilMoistureValue = analogRead(33);
soilmoisturepercent = map(soilMoistureValue, AirValue, WaterValue, 0, 100);
if (soilmoisturepercent >= 100) {
soilmoisturepercent = 100;
} else if (soilmoisturepercent <= 0) {
soilmoisturepercent = 0;
}
Serial.println("ESTRAZIONE");
Serial.print(XCiclo);
XRecord[XCiclo].SoilMostx100 = soilmoisturepercent;
Serial.print(XCiclo);
strftime(XRecord[XCiclo].Hod, 3, "%H", &timeinfo);
Serial.print(XCiclo);
strftime(XRecord[XCiclo].Mod, 3, "%M", &timeinfo);
Serial.print(XCiclo);
strftime(XRecord[XCiclo].Dom, 3, "%d", &timeinfo);
Serial.print(XCiclo);
strftime(XRecord[XCiclo].Moy, 3, "%m", &timeinfo);
Serial.print(XCiclo);
strftime(XRecord[XCiclo].Year, 5, "%Y", &timeinfo);
Serial.println("XCiclo READSENSOR CICLO ");
Serial.print(XCiclo);
}
ovviamente timeinfo e' gia' valorizzata col timestamp da ntp.
In questo modo , speravo di su XRecord, tutti i campi per ricomporre in stampa la data al momento dell'emissione della email.
Perche' cosi' tanti print? per capire come mai, XCiclo , che va da 0 a 5 , quando arriva a 5 e assegno a XRecord il primo valore,(soilmoisturepercent) esce dall'operazione, con il valore 100 !
ma solo quando arrivo a 5.
Quindi la riga seguente, quella con strftime, mi assegna la riga 100..... e non la 5.
Mi pare fantascienza dell'assurdo. Non PUO' essere, eppure il serial monitor, quando il programma gira, me lo mostra chiaramente.....
Potete illuminarmi per favore? Non ne vengo piu' fuori, ho provato di tutto.... grazie