Błąd wskazań czujnika deszczu

Awatar użytkownika
shimano73
Posty: 1972
Rejestracja: ndz lut 28, 2016 12:27 pm
Lokalizacja: Orzesze
Kontakt:

Zauważyłem dziś różnicę po między tym co widać na serwerze a tym co widać w aplikacji na telefonie , tzn w aplikacji pokazuje 100x mniej :o , może to jest przyczyną że zerują mi się pomiary z deszczomierza bo double się przepełnia :D . Może zaskoczę was pytaniem , ale jaka jest maksymalna wartość dla zmiennej double w esp8266 , bo znalazłem w sieci niby zajmuje 8 bajtów, liczbę całkowitą bym sobie wyliczył ale jak to jest ze zmiennoprzecinkową. Przepraszam ale brakuje mi wiedzy ... podstawowej :roll:
W elektronice jak nie wiadomo o co chodzi to zwykle chodzi o zasilanie

Wezmę udział w Supla Offline Party 2024 :)
Awatar użytkownika
klew
Posty: 8263
Rejestracja: czw cze 27, 2019 12:16 pm
Lokalizacja: Wrocław

double jest zapisywany inaczej niż liczby całkowite. Z reguły jest tam jakaś część opisująca liczbę, oraz wykładnik opisujący przez ile ją trezba pomnożyć. Np. coś w stylu "2,323523 * 10^13" - przy czym tylko to 2,32... i 13 są zapisane, a reszta jest wyliczana.
W praktyce double może zapisać ogromną liczbę, ale wtedy tracisz precyzję i jeśli dodajesz liczbę mniejszą niż aktualna precyzja, to takie dodawanie przestaje działać.
Widzimy się na Supla Offline Party vol. 2 :!:
Awatar użytkownika
shimano73
Posty: 1972
Rejestracja: ndz lut 28, 2016 12:27 pm
Lokalizacja: Orzesze
Kontakt:

klew pisze: wt cze 30, 2020 8:36 am double jest zapisywany inaczej niż liczby całkowite. Z reguły jest tam jakaś część opisująca liczbę, oraz wykładnik opisujący przez ile ją trezba pomnożyć. Np. coś w stylu "2,323523 * 10^13" - przy czym tylko to 2,32... i 13 są zapisane, a reszta jest wyliczana.
W praktyce double może zapisać ogromną liczbę, ale wtedy tracisz precyzję i jeśli dodajesz liczbę mniejszą niż aktualna precyzja, to takie dodawanie przestaje działać.
Moja funkcja deszczomierza wygląda tak :

Kod: Zaznacz cały

void RainCount() { // z przerwania

unsigned long curtime = millis();
  
  // Make sure we don't record bounces
  if ((curtime - tiptime) < interval) {
    return;
  }
// How long since the last tip?
 
  tiptime = curtime;


  rain += rain_gauge_cup_capacity;
  
}

double get_rain(int channelNumber, double t) {


//double t = -275;  
    t = rain;
    Serial.print("Opad deszczu :");Serial.println(rain);
    return t;
}  

gdzie rain_gauge_cup_capacity= 0.35543
i gdy pada desczyk to pokazują sie jakies wartości które rosną aby za chwile spaść prawie do zera i tak w kółko. Nie mam pomysłu co może ją resetować.
I jeszcze jedna rzecz , mianowicie sam licznik dziwnie działa, jest ustawiony jako

Kod: Zaznacz cały

attachInterrupt(digitalPinToInterrupt(RainImpuls), RainCount,FALLING);
no i funkcja RainCount powinna się wywoływać tylko przy przejściu z H na L, ale nie zawsze się tak dzieje .
Gdy czas LOW jest krótki to jest ok ale gdy LOW i HIGH jest podobny to funkcja się wywołuje przy każdej zmianie , dlaczego ?
W elektronice jak nie wiadomo o co chodzi to zwykle chodzi o zasilanie

Wezmę udział w Supla Offline Party 2024 :)
Awatar użytkownika
klew
Posty: 8263
Rejestracja: czw cze 27, 2019 12:16 pm
Lokalizacja: Wrocław

Wracając do opisanego przez Ciebie problemu z pierwszego posta - na serwerze (w sensie "w cloud"?) widzisz inną wartość niż na tel. Różnica jest 100x.
Taki błąd raczej nie wynika z urządzenia z czujnikiem deszczu. Apka na telefonie dostaje dane od serwera, więc one powinny się zgadzać.
Pokaż screen z clouda i apki oraz napisz jaki typ kanału do tego używasz (termometr?)
Widzimy się na Supla Offline Party vol. 2 :!:
Awatar użytkownika
shimano73
Posty: 1972
Rejestracja: ndz lut 28, 2016 12:27 pm
Lokalizacja: Orzesze
Kontakt:

klew pisze: wt cze 30, 2020 10:33 am Wracając do opisanego przez Ciebie problemu z pierwszego posta - na serwerze (w sensie "w cloud"?) widzisz inną wartość niż na tel. Różnica jest 100x.
Taki błąd raczej nie wynika z urządzenia z czujnikiem deszczu. Apka na telefonie dostaje dane od serwera, więc one powinny się zgadzać.
Pokaż screen z clouda i apki oraz napisz jaki typ kanału do tego używasz (termometr?)
Pomyliłem się nie 100 a 1000 , to tak jakby jedno pokazywało w litrach a drugie w m3.
Używam kanału rain ze starej bibliotecki Primary GUI V2 stworzonego na bazie termometru. Sorki za duże zdjęcia ale zrobione z telefonu
Załączniki
2DF0746E-C82D-4A3D-AA02-622B0623D0A0.png
2DF0746E-C82D-4A3D-AA02-622B0623D0A0.png (64.05 KiB) Przejrzano 2311 razy
01E125C8-4BE3-4035-A4D1-61B796B0113D.png
01E125C8-4BE3-4035-A4D1-61B796B0113D.png (118.91 KiB) Przejrzano 2311 razy
W elektronice jak nie wiadomo o co chodzi to zwykle chodzi o zasilanie

Wezmę udział w Supla Offline Party 2024 :)
Awatar użytkownika
pzygmunt
Posty: 18324
Rejestracja: wt sty 19, 2016 9:26 am
Lokalizacja: Paczków
Kontakt:

W aplikacjach wartość jest dzielona przez 1000. Web tego nie robi stąd różnica. Trzeba to uporządkować.
Awatar użytkownika
klew
Posty: 8263
Rejestracja: czw cze 27, 2019 12:16 pm
Lokalizacja: Wrocław

To pewnie jest błąd w cloud przy przeliczaniu jednostek.

Tak się zastanawiam, czy nie lepiej byłoby to zrobić na kanale licznika impulsów? Wtedy byłaby historia pomiarów dostępna. Na urządzeniu liczyłbyś tylko impulsy z deszczomierza. Przeliczenie na l/m2 ustawiałbyś w cloud.
Widzimy się na Supla Offline Party vol. 2 :!:
Awatar użytkownika
shimano73
Posty: 1972
Rejestracja: ndz lut 28, 2016 12:27 pm
Lokalizacja: Orzesze
Kontakt:

klew pisze: wt cze 30, 2020 11:37 am To pewnie jest błąd w cloud przy przeliczaniu jednostek.

Tak się zastanawiam, czy nie lepiej byłoby to zrobić na kanale licznika impulsów? Wtedy byłaby historia pomiarów dostępna. Na urządzeniu liczyłbyś tylko impulsy z deszczomierza. Przeliczenie na l/m2 ustawiałbyś w cloud.
To by się wiązało z przejściem na nową bibliotekę i cały program stacji przepisać od nowa a Wy tam tak "obiektujecie" że mało co ogarniam :lol:
W elektronice jak nie wiadomo o co chodzi to zwykle chodzi o zasilanie

Wezmę udział w Supla Offline Party 2024 :)
Awatar użytkownika
QLQ
Posty: 2278
Rejestracja: ndz wrz 03, 2017 9:13 am
Lokalizacja: Koszalin

pzygmunt pisze: wt cze 30, 2020 11:36 am W aplikacjach wartość jest dzielona przez 1000. Web tego nie robi stąd różnica. Trzeba to uporządkować.

@pzygmunt z tego co pamiętam jak robilem deszczomierz i przerabialem kod to na konsoli pokazywalo poprawnie czyli np 12l/m, w apce tez. Nie bylo wtedy wskazania wartości na serwerze i byla tylko ikona. Wiec wg mnie na Cloud jest cos nie tak, to raczej serwer mnozy x1000 i to wyświetla
jak coś nie działa to włącz zasilanie.....
Kassewsky
Posty: 164
Rejestracja: śr sty 22, 2020 9:44 am

shimano73 pisze: wt cze 30, 2020 11:58 am
klew pisze: wt cze 30, 2020 11:37 am To pewnie jest błąd w cloud przy przeliczaniu jednostek.

Tak się zastanawiam, czy nie lepiej byłoby to zrobić na kanale licznika impulsów? Wtedy byłaby historia pomiarów dostępna. Na urządzeniu liczyłbyś tylko impulsy z deszczomierza. Przeliczenie na l/m2 ustawiałbyś w cloud.
To by się wiązało z przejściem na nową bibliotekę i cały program stacji przepisać od nowa a Wy tam tak "obiektujecie" że mało co ogarniam :lol:
Więc wychodzi na to że program jest dobry?
ODPOWIEDZ

Wróć do „Ogólna dyskusja”