Cześć!
W moim przypadku (ESP32866, BME280, PMS7003), ale chyba nie tylko w moim, jest problem związany z tym, że jak chce się przy PMSie ustawić uśrednianie po więcej niż 10 pomiarach to dzieją się dziwne rzeczy. Przy pierwszej serii pomiarowej pomiar 11 zawsze jest błędny, a potem licznik pomiarów (zmienna iPM) wariuje. W moim przypadku po wartości 9, wyskakuje do losowej wartości z przedziału 5-7 i potem się zapętla. Nigdy nie przekracza 9. Potem w tym fragmencie:
if (++iPM == sensorsSettings.numerOfMeasurements) {
averagePM();
iPM = 0;
}
program nie wykrywa, że zmierzono ustawioną liczbę pomiarów i nie wykonuje uśredniania. A jak nie wykonuje uśredniania to nie wystawia ostatecznych wyników.
Wygląda na to, że jest to związane z tym, że tablica pmMeasurements ma na twardo ustawiony rozmiar 10. Po testowej zmianie na np. static unsigned short pmMeasurements[30][3]; i ustawieniu 13 pomiarów, wszystko działa dobrze. Nie wiem czy lepiej tutaj ustawić na twardo większy rozmiar tablicy, czy może w jakiś sposób sparametryzować jej rozmiar, a może po prostu ustawić na stronie konfiguracyjnej ogranicznik dla liczby pomiarów. Pozostawiam to do rozważenia. :)
Jeszcze dorzucę jedną rzecz. Wydaje mi się, że poniższa linia w funkcji takeNormalnPMMeasurements jest błędna:
if (pmMeasurements[iPM][2] < 0 || pmMeasurements[iPM][1] > 3000)
W sensie, że drugi warunek pmMeasurements[iPM][1] > 3000 powinien mieć indeks [2], a nie [1].
Cześć!
W moim przypadku (ESP32866, BME280, PMS7003), ale chyba nie tylko w moim, jest problem związany z tym, że jak chce się przy PMSie ustawić uśrednianie po więcej niż 10 pomiarach to dzieją się dziwne rzeczy. Przy pierwszej serii pomiarowej pomiar 11 zawsze jest błędny, a potem licznik pomiarów (zmienna
iPM) wariuje. W moim przypadku po wartości 9, wyskakuje do losowej wartości z przedziału 5-7 i potem się zapętla. Nigdy nie przekracza 9. Potem w tym fragmencie:program nie wykrywa, że zmierzono ustawioną liczbę pomiarów i nie wykonuje uśredniania. A jak nie wykonuje uśredniania to nie wystawia ostatecznych wyników.
Wygląda na to, że jest to związane z tym, że tablica
pmMeasurementsma na twardo ustawiony rozmiar 10. Po testowej zmianie na np.static unsigned short pmMeasurements[30][3];i ustawieniu 13 pomiarów, wszystko działa dobrze. Nie wiem czy lepiej tutaj ustawić na twardo większy rozmiar tablicy, czy może w jakiś sposób sparametryzować jej rozmiar, a może po prostu ustawić na stronie konfiguracyjnej ogranicznik dla liczby pomiarów. Pozostawiam to do rozważenia. :)Jeszcze dorzucę jedną rzecz. Wydaje mi się, że poniższa linia w funkcji
takeNormalnPMMeasurementsjest błędna:if (pmMeasurements[iPM][2] < 0 || pmMeasurements[iPM][1] > 3000)W sensie, że drugi warunek
pmMeasurements[iPM][1] > 3000powinien mieć indeks [2], a nie [1].