-
Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!newsfeed2.atman.pl!newsfeed.
atman.pl!goblin1!goblin.stu.neva.ru!eternal-september.org!feeder.eternal-septem
ber.org!news.eternal-september.org!.POSTED!not-for-mail
From: "Pszemol" <P...@P...com>
Newsgroups: pl.misc.elektronika
Subject: Re: Działająca biblioteka do BMP085
Date: Thu, 24 Apr 2014 13:04:54 -0500
Organization: prywatna
Lines: 2
Message-ID: <ljbjng$uh3$1@dont-email.me>
References: <lj8s5v$q9a$1@portraits.wsisiz.edu.pl>
<lj9clo$e2i$1@portraits.wsisiz.edu.pl> <lj9ig7$tij$1@dont-email.me>
<ljb6vm$mdt$1@portraits.wsisiz.edu.pl>
Reply-To: "Pszemol" <P...@B...com>
Mime-Version: 1.0
Content-Type: text/plain; format=flowed; charset="utf-8"; reply-type=original
Content-Transfer-Encoding: 8bit
Injection-Date: Thu, 24 Apr 2014 18:04:33 +0000 (UTC)
Injection-Info: mx05.eternal-september.org;
posting-host="d763077b99e7293485067b7f9c6d1a11";
logging-data="31267";
mail-complaints-to="a...@e...org";
posting-account="U2FsdGVkX1+pnjAJnSOu6aIPpDbltSQK"
X-MimeOLE: Produced By Microsoft MimeOLE V14.0.8117.416
In-Reply-To: <ljb6vm$mdt$1@portraits.wsisiz.edu.pl>
X-Newsreader: Microsoft Windows Live Mail 14.0.8117.416
Importance: Normal
Cancel-Lock: sha1:sLcxMlpVrI5EnYRVcRhpNGEafmA=
X-Priority: 3
X-MSMail-Priority: Normal
Xref: news-archive.icm.edu.pl pl.misc.elektronika:663871
[ ukryj nagłówki ]"Atlantis" <m...@w...pl> wrote in message
news:ljb6vm$mdt$1@portraits.wsisiz.edu.pl...
> W dniu 2014-04-24 01:31, Pszemol pisze:
>
>> Podejrzewałbym następujące linie Twojego kodu:
>>
>> 1) itoa(pressure, result, 10);
>
> Dokładnie, ta diagnoza okazała się być poprawną. Najpierw nie
> zauważyłem, że itoa() przyjmuje short inta, a potem przeoczyłem literkę
> "l" w tokenie obsługującym przesyłaną wartość w sprintf_P. Zaowocowało
> to takim samym błędem.
>
> Teraz wszystko działa, otrzymuję ciśnienie o prawdopodobnej wartości.
No to fajnie :-)) Cieszę się, że mi kryształowa kula wciąż działa dobrze ;-)
> Jeśli chodzi o temperaturę, to zastosowana biblioteka zwraca ją jako
> double. Myślę, że nie będę się już bawił w jej przerabianie, zresztą
> miło byłoby, gdyby wynik był zwracany w normalnych jednostkach, a nie
> 0,1 stopnia C.
>
> Włączanie operacji zmiennoprzecinkowych w stdio.h raczej nie chodzi w
> grę. Nie dosyć, że kod od tego tyje, to jeszcze zużywane są cykle
> procesora.
>
> Dobrze pamiętam tę sztuczkę?
>
> double temperature = bmp085_gettemperature();
> int16_t intpart = (int16_t)temperature;
> int16_t decpart = ((int16_t)(temperature*2)%2);
> sprintf_P(pAnswer, PSTR("+TEMP: %d.%d\r\n"), intpart, decpart);
Hm... Sprawdźmy na szybko... :-)
Temperatura pokojowa, załóżmy 21,563C.
Mamy więc wartość zmiennej 'temperature' w dziesiątych Celciusza: 215.63
A więc wartość intpart jest automagicznie 215, tu OK.
Wartość decpart obliczamy, w kolejności, mnożąc 215.63*2 = 431.26
Teraz rzutujemy takiego doubla do inta, mamy 431.
Reszta z dzielenia tego 431 przez 2 wyjdzie nam 1.
Czyli sprintf wyświetli 215.1 zamiast 215.63 - kiepsko.
Lepiej chyba zrobić tak:
double dblTemperature = bmp085_gettemperature();
int iTemperature = ( dblTemperature < 0 ) ? dblTemperature - 0.5 :
dblTemperature + 0.5;
sprintf(pAnswer, "+TEMP: %d.%d\r\n"), iTemperature, iTemperature%10);
Podstawmy nasz przykład z dblTemperature = 215.63.
iTemperature = (int)(216.13);
Zatem
iTemperature = 216
Dla wartości z przedziału < xx.5, np dblTemperature = 215.33.
iTemperature = (int)(215.83);
Zatem
iTemperature = 215
Dla temperatur ujemnych, np dblTemperature = -215.63.
iTemperature = (int)(-216.13);
Zatem
iTemperature = -216
Ale nie bardzo rozumiem czemu skoro już masz typ zmiennej double
w swoim kodzie, a więc musiałeś włączyć takie liczby, nie?
Czemu więc nie zrobisz po prostu tak:
double dblTemperature = bmp085_gettemperature();
sprintf_P(pAnswer, PSTR("+TEMP: %.1f\r\n"), dblTemperature/10.0);
I od razu uwaga, pewnie zauważyłeś dodałem przedrostki oznaczające
typ zmiennej... Tak się po prostu łatwiej czyta kod, zwłaszcza jak używasz
zmiennych o bardzo różnych typach które dawałyby niebezpieczne efekty
przy cichym (domyślnym) rzutowaniu przez kompilator...
Takie przedrostki to popularna konwencja zwana "notacją węgierską",
warto się jej od razu nauczyć i trzymać nawet w małych programach
a jak wejdzie Ci w nawyk to będziesz miał później jak znalazł ;-)
http://pl.wikipedia.org/wiki/Notacja_w%C4%99gierska
Następne wpisy z tego wątku
- 24.04.14 21:01 Sylwester Łazar
- 24.04.14 21:01 Sylwester Łazar
- 24.04.14 21:05 Pszemol
- 24.04.14 21:10 Grzegorz Niemirowski
- 24.04.14 21:14 Sylwester Łazar
- 24.04.14 21:28 Pszemol
- 24.04.14 21:28 Pszemol
- 24.04.14 21:31 Grzegorz Niemirowski
- 24.04.14 23:15 Pszemol
- 25.04.14 08:05 Zbych
- 25.04.14 14:00 Pszemol
- 25.04.14 14:08 Sylwester Łazar
- 25.04.14 14:55 Pszemol
- 25.04.14 15:09 Zbych
- 25.04.14 17:04 Pszemol
Najnowsze wątki z tej grupy
- Czy cos fi przechodzi przez trafo separujące?
- śrubka masy
- Ciekawostka na dziś lock bity
- [OT] napisy w YT
- Było 83V
- Stare komputery
- Odbiornik ADS-B i wzmacniacze
- Thunderbird i dysk...
- opornosc falowa
- Bateria 9V 6F22, alkaliczna v cynkowa, samorozładowanie, bateria wysokiej trwałości do miernika
- Tani zakup z ali?
- w czasach LED komary mają ciężko
- walizka z kodami
- Rejestrator temperatur - termopara, siec
- Router LTE z możliwością zmian MTU
Najnowsze wątki
- 2025-08-06 Gdynia => Konsultant wdrożeniowy (systemy controlingowe) <=
- 2025-08-06 Białystok => Inżynier oprogramowania .Net <=
- 2025-08-06 "[...] sejmowe wystąpienie posłanki Klaudii Jachiry, która zakończyła je słowami ,,Sława Ukrainie"."
- 2025-08-05 "Chiny przekraczają w wydobyciu 4 mld ton węgla, Indie i USA ponad 1 mld, a Rosja 500 mln ton [...]"
- 2025-08-05 Panuje się 181 159,42 zł./mies. na posła w 2026r.
- 2025-08-05 "Chiny przekraczają w wydobyciu 4 mld ton węgla, Indie i USA ponad 1 mld, a Rosja 500 mln ton [...]"
- 2025-08-05 Czy cos fi przechodzi przez trafo separujące?
- 2025-08-05 kajaki i promile
- 2025-08-05 Re: Tesla jest bezpieczna, wczoraj spaliła się doszczętnie na Ursynowie i nikomu się nic nie stało
- 2025-08-05 Gdynia => Przedstawiciel handlowy / KAM (branża TSL) <=
- 2025-08-05 Re: Atak na lekarza w Oławie. Policja zatrzymała sprawcę na lotnisku Polska Agencja Prasowa 4 sierpnia 2025, 12:16 FACEBOOK X E-MAIL KOPIUJ LINK W szpitalu w Oławie 37-letni pacjent zaatakował lekarza, po tym, jak ten odmówił mu wypisania długoterminowego
- 2025-08-05 B2B i książka przychodów i rozchodów
- 2025-08-04 Re: Atak na lekarza w Oławie. Policja zatrzymała sprawcę na lotnisku Polska Agencja Prasowa 4 sierpnia 2025, 12:16 FACEBOOK X E-MAIL KOPIUJ LINK W szpitalu w Oławie 37-letni pacjent zaatakował lekarza, po tym, jak ten odmówił mu wypisania długoterminowego
- 2025-08-04 Na grupie comp.os.linux.advocacy CrudeSausage twierdzi, że Micro$lop używa SI do szyfrowania formatu dok. XML
- 2025-08-04 Na grupie comp.os.linux.advocacy CrudeSausage twierdzi, że Micro$lop używa SI do szyfrowania formatu dok. XML