все равно не хватит выводов, так что запись на карту мы реализуем отдельно.
Схема метеостанции в таком варианте представлена на рис. 22.5.

Рис. 22.5.
Подключение датчиков и часов ничем не отличается от рассмотренного ранее, а подключение ЖК-дисплея и обращение с ним описано в

Рис. 22.6.
Если внешний датчик будет недоступен (отключен, пропадет связь, закончатся батарейки), то в верхней строке после слов «На улице» будут отображаться прочерки. Если передаваемая устройством величина напряжения батарейки станет меньше порога (установленного нами в 3,3 В), то строка с данными начнет мигать. После включения питания внешнего датчика в течение первых 16 переданных показаний вместо значения напряжения батарейки станут передаваться одни нули, соответственно, дисплей главного модуля также будет миганием напоминать, что батареи в датчике якобы разряжены. Однако примерно через 2 минуты начнет передаваться измеренное среднее значение, и все должно встать на свои места.
* * *
Подробности
Величину порога, возможно, придется подкорректировать по результатам испытаний. Arduino Mini фактически ничего, кроме контроллера, не содержит, и она должна вообще «тянуть» вплоть до полного истощения батареек (согласно документации, у ATmega328 нижний предел питания 1,8 В[52]). У сенсора SHT1x нижний порог повыше (2,4 В), но это тоже далеко за пределами того, что дадут три даже истощенных элемента. То есть, нас будет лимитировать Xbee-модуль, который, согласно документации фирмы Digi, функционирует до 2,1 В. Из этих соображений и выбран порог в 1,1 В на элемент: 2,2 В на модуль или 3,3 В на все питание. В реальности это требует тщательной проверки, причем с реальными батарейками, а не в искусственно созданных условиях. Что же касается дальности работы выносного датчика, то Xbee-модули проявили себя наилучшим образом — в процессе испытаний данные уверенно принимались через три гипсолитовых межкомнатных перегородки толщиной 20 см каждая (уровень сигнала Wi-Fi в тех же условиях падает примерно на 70–80 дБ, что снижает скорость передачи до почти полной неработоспособности канала). Впрочем, если вас дальность работы не удовлетворит, то та же фирма Digi выпускает намного более мощный Xbee Pro.
Наличие библиотеки для работы с SD-картой— один из самых ярких примеров преимуществ Arduino. Можно только представить себе, сколько трудов стоило бы написание на ассемблере кода доступа к флэш-карте, отформатированной в системе FAT32. Не невозможная задача, конечно, но весьма трудновыполнимая, особенно для любителя, да и вряд ли кто-нибудь когда-нибудь пытался выполнить ее на ассемблере. В моей книжке [21] есть пример кода записи/чтения применительно к картам типа ММС — «младшему брату» карт Secure Digital. Ни о каких именах файлов, разумеется, там и речи не идет — данные пишутся просто в ячейки памяти карты, и считаны могут быть только таким же способом, через контроллер. А здесь такие операции, как создание, удаление файла или проверка его существования, стандартные для «больших» компьютеров, выполняются не сложнее, чем в Windows. С единственным ограничением — собственно форматирование карты должно быть выполнено заранее.
Обычно карты продаются уже отформатированными в нужной нам системе FAT 16 или FAT32. Однако оно может «слететь» в процессе эксплуатации или наших с вами издевательств над картой, кроме того, изредка встречаются карты, отформатированные в системе, отличной от FAT. Для того, чтобы проверить систему и при необходимости заново отформатировать карту, ее надо вставить в кардридер компьютера, подождать, пока она появится в Проводнике и через контекстное меню выбрать пункт Свойства. Там на самой первой вкладке Общие будет показана Система, в которой отформатирована эта карта. Если она отличается от FAT 16 (просто FAT) или FAT32, то закройте окно свойств, заново