• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

esp get vcc przy termometrze

Object Storage Arubacloud
0 głosów
246 wizyt
pytanie zadane 18 marca 2022 w C i C++ przez danehcan Obywatel (1,170 p.)

Witam mam dwa programy do arduino(esp) jeden to ds18b20 + getvcc a drugi to wiele ds18b20 

drugi https://pastebin.com/TZAp3bJ4

w lini 128 próbowałem dodać do html zmienne nap 1 i nap2 które wcześniej zdefiniowałem jako getvcc i teraz co zrobić aby zapisało mi się to w jednej lini

 message += "<h1>nap=<h1>";
  message += nap1;
  message += nap2;
  message += "<h1>V<h1>";

jest to linia 128 to 131 i ma ona być w jednym rzędzie. Tylko aby pokazywało też dziesiętne i setne części napięcia np. 3.3V.

Pisanie stron w c to nie jest moje ulubione zajęcie.

komentarz 18 marca 2022 przez Oscar Nałogowiec (29,320 p.)
  int nap1 = ESP.getVcc() / 1000;
  int nap2 = ESP.getVcc() - nap1*1000;

 

Domyślam się, że getVcc() to funkcja, która mierzy napięcie w mV. Nie rób tak jak jest napisane - w ten sposób wywołujesz pomiar 2 razy, wyniki mogą się różnić i dostaniesz jakieś bzdury z tych obliczeń. To nie jest funkcja która zawsze zwraca to samo.

 

komentarz 18 marca 2022 przez danehcan Obywatel (1,170 p.)
a jak inaczej to zrobić???
komentarz 18 marca 2022 przez Oscar Nałogowiec (29,320 p.)
edycja 18 marca 2022 przez Oscar

Odczytać raz i zapamiętać w zmiennej. Najlepiej zapamiętaj po prostu wynik pomiaru, formatowanie, podział na części rób tam, gdzie to jest potrzebne.

Niebezpieczeństwo polega na tym, że np. pierwszy raz odczyta się 5.000, nap1 będzie 5, a następnie w drugim kroku odczyta się 4.999 i nap2 zrobi się -1.

Oczywiście przy napięciu 3.3V będzie trochę mniejszy błąd, ale zawsze coś podobnego jest możliwe.

Taki podział wyniku na część całkowitą i ułamkową prowadzi do kolejnego problemu:

Założmy że funkcja dała 5001 (5.001V). Wtedy nap1 będzie 5 a nap2 - 1 i wyświetlisz 5.1 (powinieneś oczywiście tam w środku dopisać kropkę/przecinek). Powinieneś w drugim etapie dopisać 001 - a to już nie tak prosto, musisz użyć funkcji formatujących i wymusić wygenerowanie początkowych cyfr. Nie jestem biegły w tych wszystkich nowych funkcjach w C++, zresztą nie wiem czy one działają w kompilatorze na ten procek.

Najprościej będzie użyć starych, dobrych funkcji z C:


nap = ESP.getVcc();

char buf[10];       ///< na 1 liczbę, 3 znaki po przecinku, max 2 przed no i sam przecinek
snprintf(buf, sizeof(buf), "%d.%03d", nap / 1000, nap % 1000);

message += buf;

 

No i jeszcze jedno - <H1>jakis tekst</H1> - nie dałeś tagów zamykających.

Tak na przyszłość:

Kiedyś też robiłem podobnie rożne stroniczki, jednak dzisiaj, gdy każda przeglądarka obsługuje JavaScript, można detale wizualne przenieść do przeglądarki. Niech program zwraca jedynie jakiś prosty json albo xml zawierający same dynamiczne dane, a odpowiedni skrypt na stronie ściąga okresowo aktualne dane i wpisuje je na stronę. Oczywiście gdzieś (najlepiej na tym samym porcie) musi być normalny ale bardzo prosty serwerek www, który po prostu udostępnia pliki.

 

komentarz 18 marca 2022 przez danehcan Obywatel (1,170 p.)

Wielkie dzięki zadziałało a teraz jeszcze miałbym pytanie dotyczące nieszczęsnych Woltów jako litery V po pomiarze próbowałem ten kod od ciebie zmodyfikować i zrobiłem to w sposób następujący:

snprintf(buf, sizeof(buf), "%d.%03d", nap / 1000, nap % 1000, "</h1>wilgotnosc=</h1>");

Oraz tak z ciekawości da się pobrać napięcie nadane na np gp2( aby vcc sczytywało nie z gniazda vcc tylko właśnie gp2 lub chpd.)

komentarz 19 marca 2022 przez Oscar Nałogowiec (29,320 p.)
Akurat nie warto w tym kodzie dokonywać takich zmian. Zadeklarowany bufor wystarcza na 9 znakowy napis - starczy na 1 liczbę z 3 cyframi po przecinku, ale nie na fragmenty HTMLa. Trzeba by go powiększyć, ale skoro i tak składasz napis poprzez doklejanie dolejnych elementów do zmiennej message to niech tak będzie dalej. Tyle że doklejać możesz gotowe napisy - stąd konieczność sformatowania liczb. Taki fragment html to zwykły tekst, można go prosto dokleić.

Funkcje rodziny *printf przyjmują dowolną liczbę dowolnych parametrów i ich działanie określane jest poprzez napis formatujący (ten z %d). Samo dopisanie parametrów nic nie da, trzeba zmodyfikować napis formatujący. Ale ogólnie opis tych funkcji jest nieco długi i można łatwo go znaleźć w sieci.

Tym razem dałeś dwa tagi zamykające, zamiast jednego otwierającego <h1> i jednego zamykającego </h1>.

Nie znam akurat tego procka na tyle by znać jego rejestry i peryferia. Dopiero jakiś czas temu kupiłem sobie płytkę, ale jeszcze jej nawet nie włączyłem. Skoro w bibliotece jest funkcja do odczytu Vcc to powinna też być do odczytu innych możliwych napięć.

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
2 odpowiedzi 1,060 wizyt
0 głosów
1 odpowiedź 308 wizyt
0 głosów
1 odpowiedź 702 wizyt
pytanie zadane 6 listopada 2018 w Mikrokontrolery przez kubekszklany Gaduła (3,190 p.)

92,698 zapytań

141,613 odpowiedzi

320,139 komentarzy

62,057 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...