Что же касается атмосферного давления, то модуль ВМР085 выдает его, как водится, в паскалях в виде действительного числа (т. е. типа float
). В программе придется ввести коэффициент пересчета для его представления в привычных миллиметрах ртутного столба, притом в виде целого числа (указывать десятичные доли атмосферного давления не имеет смысла). Вот тут и скажутся все преимущества высокоуровневого языка Arduino — этот коэффициент имеет величину 0,0075 (750 мм рт. ст. — это 1000 гПа с высокой точностью). Для умножения на такую величину в ассемблерной программе придется сначала преобразовывать ее в целое число, применять довольно громоздкие процедуры перемножения многобайтовых чисел, потом приводить результат к нужному виду (см. главу 20), а у нас это сведется к одной строке в программе:mmHg = int(pressure*0.0075)+5;
Здесь мы применяем явное преобразование типов — результат умножения переменной pressure типа float
на дробный коэффициент мы сразу приводим к целому виду типа int. За такую роскошь мы, конечно, расплачиваемся дополнительными килобайтами кода, но в данном случае оно того стоит.* * *
Подробности
А зачем здесь к полученному значению добавляется еще и число 5? Это поправочный коэффициент, который вводится индивидуально из следующих соображений. В главе 20
мы упоминали, что для небольших высот над уровнем моря при изменении высоты на каждые 10–12 м давление меняется примерно на 1 мм рт. ст. В пределах такого города, как Москва, показания могут меняться в зависимости от местоположения примерно на 10 миллиметров. Мы же хотим, чтобы станция показывала величины, близкие к тем, что передаются Гидрометцентром, — иначе, проглядев прогноз погоды, ее показания придется все время пересчитывать в уме. Так что коэффициент 5 — это экспериментально вычисленная поправка в моем случае. Будьте готовы, что вам ее придется пересчитать, сравнивая показания с теми, что публикуются для вашего населенного пункта каждые три часа в интернет-службах погоды. Если же вы хотите, чтобы станция показывала реальное давление без всяких поправок, то просто вычеркнуть этот коэффициент из программы будет недостаточно — придется датчик дополнительно калибровать. А это дело непростое — не каждый физический институт имеет средства для поверки датчиков атмосферного давления, потому и проще подогнать его показания под Гидрометцентр.* * *
В библиотеке для барометра — файле Barometer.cpp
(папка Barometer_sensor) — необходимо закомментировать забытые разработчиками тестовые строки 28 и 40: Serial.print ("Teinperaturet: ") и Serial.print ("Temperaturet2: "). В противном случае у вас собьется прием данных от Xbee-модуля и все время на индикаторных панелях будет возникать лишний мусор.В отличие от барометрического, библиотека для модуля измерения температуры и влажности SHT1x[47]
применяет не аппаратный интерфейс 12С, а его программную реализацию (подробнее о том, как это делается, рассказано в моей книге [21]). Модуль подключается к любым цифровым выводам — на схеме рис. 22.1 в этом качестве выступают выводы А2 и A3 (что соответствует цифровым выводам 16 и 17). В программе в секции определений их надо указать:#include
#define dataPin 16
#define clockPin 17
SHT1x sht1x(dataPin, clockPin);