-
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
- Digikey, SN74CBT3253CD, FST3253, ktoś ma?
- Szukam: czujnik ruchu z możliwością zaączenia na stałe
- kabelek - kynar ?
- Podnieść masę o 0.6V
- Moduł BT BLE 5.0
- Pomiar amplitudy w zegarku mechanicznym
- ale zawziętość i cierpliwość
- Chiński elektrolizer tester wody
- Dzisiaj Bentlejem czyli przybieżeli sześciu Króli do Rysia na kasie
- ciekawy układ magnetofonu
- Mikroskop 3D
- Jak być bezpiecznym z Li-Ion?
- Szukam monitora HDMI ok. 4"
- Obcinaczki z łapaczem
- termostat do lodowki
Najnowsze wątki
- 2025-01-02 Szczecin => Senior Field Sales (system ERP) <=
- 2025-01-02 Ostrów Wielkopolski => Area Sales Manager OZE <=
- 2025-01-02 Bydgoszcz => Specjalista ds. Sprzedaży (transport drogowy) <=
- 2025-01-01 Już nie płoną
- 2025-01-01 Digikey, SN74CBT3253CD, FST3253, ktoś ma?
- 2025-01-01 Co tam u Was
- 2025-01-01 Koder szuka pracy. Koduję w j.: Asembler, C, C++ (z bibl. Qt) i D.
- 2025-01-01 Gdańsk => Delphi Programmer <=
- 2025-01-01 Łódź => Programista Full Stack .Net <=
- 2025-01-01 Żerniki => Regionalny Kierownik Sprzedaży (OZE) <=
- 2025-01-01 Wrocław => Specjalista ds. Sprzedaży <=
- 2024-12-31 Warszawa => Spedytor Międzynarodowy <=
- 2024-12-31 Warszawa => Architekt rozwiązań (doświadczenie w obszarze Java, AWS
- 2025-01-01 Przypomnienie: Mini Netykieta polskich grup dyskusyjnych wer. 3.2.2
- 2024-12-31 Zamykanie konta dziecka.