@vajera, @klew po przeczytaniu Waszych postów nie wiem czy dobrze zrozumiałem.
Zrobiłem próbę, ustawiłem mniejszy zakres, żeby spr co się stanie
uint16_t 65535. Wykonywał się co 5s i po przepełnieniu czyli ponad 1min wpadł w pętle.
Czy to właśnie jest spowodowane że zastosowałem uint16 zamiast uint32 jak pisał @klew?
Code: Select all
//uint32_t timestamp = 0;
uint16_t timestamp = 0; //65535
void setup() { //ESP właśnie się uruchomiło
Serial.begin(115200);
timestamp = millis(); //inicjalizacja zmiennej timestamp aktualną wartością millis()
}
void loop() { //wykonuje się cały czas, millis () ulega przepełnieniu po około 49 dniach
if (millis() >= timestamp) { //sprawdzamy czy millis () >= od timestamp, ponieważ wcześniej ustawiliśmy timestamp na millis () a wartość millis () wzrasta, więc ten warunek powinien być spełniony chyba, że doszło do przepełnienia - wtedy millis() będzie liczyć od zera a timestamp będzie zawierał poprzednią wartość tej funkcji czy bardzo dużą liczbę
if (millis() - timestamp > 5000) {
Serial.println("Wykonaj cos co 5s");
timestamp = millis();
}
}
else { //tutaj doszło do przepełnienia, więc z powrotem ustawiamy timestamp na millis() i na 49 kolejnych dni mamy spokój
timestamp = millis();
Serial.println("Przepelnienie licz od nowa");
}
}