Próbuję właśnie uruchomić BMP085 w jednym ze swoich urządzeń i powoli zaczynam z tego powodu siwieć. ;)
Na samym początku, bez większego problemu udało mi się znaleźć taką oto bibliotekę w Sieci:
- wychodzi jakieś 300 HPa...
Pierwsze o czym pomyślałem to uszkodzony czujnik. Wyjąłem więc z szuflady Arduino i wgrałem ten kod:
Zabrałem się więc za porównywanie kodu zawartego w obydwu bibliotekach. Odczytywanie danych kalibracyjnych wygląda praktycznie tak samo, podobnie jak końcowa konwersja.
Jedyny fragment, w którym mógłbym się czegoś dopatrywać to odczyt wartości ciśnienia ze scalaka. W bibliotece pod AVR wygląda to następująco:
pressure = bmp085ReadShort(0xF6,error_code); pressure = pressure << 8; pressure = pressure >> (8-OSS);
Funkcja bmp085ReadShort zwraca uint16_t, a więc czytane są tylko dwa bajty.
Natomiast w kodzie na Arduino znajduje się następujący fragment:
msb = Wire.read(); lsb = Wire.read(); xlsb = Wire.read();
up = (((unsigned long) msb << 16) | ((unsigned long) lsb << 8) | (unsigned long) xlsb) >> (8-OSS);
Jak widać odczytywane są tutaj trzy jednobajtowe (char) zmienne, które potem są konwertowane do zwracanej wartości unsigned long.
Czy moja dedukcja jest prawidłowa? A może to nie ma nic do rzeczy i źródła problemu powinienem szukać gdzie indziej?