Buduję pewien projekt - nie jest to tajemnica, ale za dużo by pisać. Będzie tam opcja wyświetlania wykresu dobowego temperatury i wilgotności. W jaki sposób wykryć zmianę dnia?
Mam o to taki kod. W skrócie wykrywa on zmianę dnia jeżeli aktualna godzina jest mniejsza od ostatniej zapisanej w pamięci. Działa to dobrze jeżeli ostatni pomiar był wczoraj o godzinie 13:30, a kolejny pomiar jest dziś o godzinie wcześniejszej niż 13:30 ( czyli urządzenie było wyłączone krócej jak 23:59 minut). W wypadku gdy urządzenie będzie wyłączone dłużej niż 24 godziny, wtedy warunek if (c > a) {kolejny dzień) , gdzie c - poprzednia godzina, a - aktualna godzina, nie będzie spełniony, bo w rzeczywistości wyglądać to będzie c < a.
Więc czy jest jakiś inny sposób na wykrycie kolejnego dnia, nie opierając na odczycie godziny?
Kod:
void aktualizacjaWykresuTemeperaturyIWilgotnosci() {
DateTime now = rtcDS3231.now();
int godzina = now.hour();
int minuta = now.minute();
czasDS3231 = (godzina * 60) + minuta;
int i = indexTempGodz;
// jesli uplynelo 2 miuty i minuty sa parzyste
if (czasDS3231 - zapamietanyCzasDS3231 != 0 && (czasDS3231) % 2 == 0) {
zapamietanyCzasDS3231 = czasDS3231;
if (godz[i] != ((godzina * 60) + minuta) / 2) { // po to zeby nie zapisywalo tej samej wspolrzednej osi X
indexTempGodz++;
int a = ((godzina * 60) + minuta) / 2; // wylicza współrzędną osi X
int c;
float b = dht.getTemperature() * 5;
float d = dht.getHumidity() * 2.5;
// sprawdza poprawnosc danych
if (dht.getStatus()) {
Serial.println("Blad odczytu danych z czujnika");
} else {
FRAM.read(adresEepromGodzDzis, c);
if (c > a) {
indexTempGodz = 1;
przepisanieDoEepromTemperaturyZWczorajDoPrzedwczoraj(); // nie zmieniać kolejności!!!
przepisanieDoEepromTemperaturyZDzisDoWczoraj(); // nie zmieniać kolejności!!!
adresEepromTempDzis = 1000;
adresEepromWilgotnoscDzis = 4000;
adresEepromGodzDzis = 7000;
FRAM.write(adresEepromTempDzis, -9999);
FRAM.write(adresEepromWilgotnoscDzis, -9999);
FRAM.write(adresEepromGodzDzis, -9999);
godz[i] = -9999;
temp[i] = -9999;
wilgotnosc[i] = -9999;
} else {
godz[i] = a;
temp[i] = b;
wilgotnosc[i] = d;
godz[i + 1] = -9999;
temp[i + 1] = -9999;
wilgotnosc[i + 1] = -9999;
adresEepromTempDzis = adresEepromTempDzis + 4;
adresEepromWilgotnoscDzis = adresEepromWilgotnoscDzis + 4;
adresEepromGodzDzis = adresEepromGodzDzis + 4;
zapisDoEepromTemperaturyIWilgotnosciIGodziny();
}
}
}
}
}
Mam o to taki kod. W skrócie wykrywa on zmianę dnia jeżeli aktualna godzina jest mniejsza od ostatniej zapisanej w pamięci. Działa to dobrze jeżeli ostatni pomiar był wczoraj o godzinie 13:30, a kolejny pomiar jest dziś o godzinie wcześniejszej niż 13:30 ( czyli urządzenie było wyłączone krócej jak 23:59 minut). W wypadku gdy urządzenie będzie wyłączone dłużej niż 24 godziny, wtedy warunek if (c > a) {kolejny dzień) , gdzie c - poprzednia godzina, a - aktualna godzina, nie będzie spełniony, bo w rzeczywistości wyglądać to będzie c < a.
Więc czy jest jakiś inny sposób na wykrycie kolejnego dnia, nie opierając na odczycie godziny?