Witam Kolegów
Zakupiłem niedawno od kolegów ze wschodu czujnik wilgotności i temperatury Si7021
Czujnik na płytce posiada stabilizator 3,3V oraz układ translacji poziomów 3,3V->5V tak więc można go podłączyć bezpośrednio pod zasilanie 5V.
Czujnik komunikuje się z procesorem za pomocą I2C.
Link do dokumentacji
http://www.silabs.com/documents/public/data-sheets/Si7021-A20.pdfPonieważ na forum nie znalazłem informacji na temat tego czujnika pozwalam sobie na zamieszczenie mojego opracowania.
Oto kod:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Do projektu zaimportowane są biblioteki z
BB LCD oraz I2C
Jak widzicie w przerwaniu Timera2 oprócz programowego Timera1 napędzam sobie zmienną
"c" która jest czymś w rodzaju timera programowego a posłużyła do cyklicznego odczytu pomiarów z czujnika ~co 20s.
Do odczytu danych służy funkcja
TWI_read_buf - tu odsyłam do
BBFunkcja zapisuje dane
MSB i
LSB do buforów
"uint8_t temp[3];" dla temperatury i
"uint8_t rh[3];" dla wilgotności.
Następnie za pomocą funkcji
"void View_Temp(void);" i
"void View_RH(void);" dokonuję obliczeń wartości temperatury i ciśnienia wyświetlając jednocześnie dane na LCD.
Tak to się prezentuje ostatecznie
Na uwagę zasługuje sposób obliczania temperatury.
Chcąc uniknąć liczb zmiennoprzecinkowych po prostu wystarczyło przesunąć przecinek w dwóch wartościach żeby wynik otrzymać w postaci całkowitej. Sposób opisany w
BBOprócz tego należało za pomocą dodatkowych warunków
"if" zająć się wyświetlaniem temperatur ujemnych.
Jeżeli część całkowita temperatury była równa zero a część ułamkowa już na minusie to otrzymywałem na LCD
dlatego część ułamkowa jest mnożona przez
"-1" a dodatkowo badam czy już zeszliśmy poniżej zera i sztucznie jest wstawiany znak
"-"a tu przejście przez
"0"W pętli głównej migam sobie diodą ot tak żeby wiedzieć, że nic się nie blokuje....
Post umieściłem w dziale dla początkujących bo jestem początkujący i proszę o uwagi na temat kodu.
pozdrawiam Marek