Arduino:Примеры/Series2 IoSamples

Материал из Онлайн справочника
Перейти к навигации Перейти к поиску

Перевод: Максим Кузьмин (Cubewriter) Контакты:</br>* Skype: cubewriter</br>* E-mail: cubewriter@gmail.com</br>* Максим Кузьмин на freelance.ru
Проверка/Оформление/Редактирование: Мякишев Е.А.


Получение данных от удаленного XBee-модуля (Series 2)[1]

Этот пример показывает, как при помощи библиотеки XBee настроить XBee-модуль на получение данных от удаленного XBee-модуля. Работает только для XBee-модуля типа Series 2.

Код

  1 /**
  2  * Автор – Эндрю Рэпп (Andrew Rapp). 2009 год, все права защищены.
  3  *
  4  * Этот файл – часть библиотеки XBee-Arduino.
  5  *
  6  * Библиотека XBee для Arduino – это бесплатное ПО: его можно 
  7  * распространять и/или модифицировать согласно условиям Универсальной 
  8  * общественной лицензии GNU, изданной Фондом свободного ПО – будь то 
  9  * 3-тья или более поздняя версия этой лицензии (на ваш выбор).
 10  *
 11  * Библиотека XBee-Arduino распространяется бесплатно в надежде на то, 
 12  * что окажется полезной, но БЕЗО ВСЯКОЙ ГАРАНТИИ; включая даже 
 13  * обязательную гарантию на КОММЕРЧЕСКОЕ КАЧЕСТВО и ПРИГОДНОСТЬ 
 14  * КОНКРЕТНОЙ ЦЕЛИ. Более подробно читайте в Универсальной 
 15  * общественной лицензии GNU.
 16  *
 17  * Вы должны получить копию Универсальной общественной лицензии GNU 
 18  * вместе с библиотекой XBee-Arduino. Если не получили, ее можно найти 
 19  * на http://www.gnu.org/licenses/.
 20  */
 21 
 22 #include <XBee.h>
 23 #include <SoftwareSerial.h> 
 24 
 25 /*
 26 Этот пример – только для XBee-модуля типа Series 2 (ZigBee).
 27 Он принимает данные от удаленного XBee-модуля. У удаленного 
 28 XBee-модуля IR должно быть больше «0», а также должен быть активирован 
 29 как минимум один цифровой или аналоговый входной контакт.
 30 Также к Arduino должен быть подключен XBee-координатор.
 31  
 32 Чтобы видеть информацию об XBee-коммуникации, этот пример использует 
 33 библиотеку SoftSerial. Я использую плату Modern Device USB BUB
 34 (http://moderndevice.com/connect) и просматриваю выдачу при помощи 
 35 монитора порта в IDE Arduino.
 36 */ 
 37 
 38 // Задаем TX и RX контакты для NewSoftSerial.
 39 // Подключаем 8-ой контакт Arduino к TX-контакту конвертера USB-Serial:
 40 uint8_t ssRX = 8;
 41 // Подключаем 9-ый контакт Arduino к RX-контакту конвертера USB-Serial:
 42 uint8_t ssTX = 9;
 43 // Не забудьте подключить все устройства к общей «земле»: XBee, 
 44 // Arduino и конвертер USB-Serial
 45 SoftwareSerial nss(ssRX, ssTX);
 46 
 47 XBee xbee = XBee();
 48 
 49 ZBRxIoSampleResponse ioSample = ZBRxIoSampleResponse();
 50 
 51 XBeeAddress64 test = XBeeAddress64();
 52 
 53 void setup() { 
 54   Serial.begin(9600);
 55   xbee.setSerial(Serial);
 56   // Запускаем коммуникацию SoftSerial:
 57   nss.begin(9600);
 58 }
 59 
 60 void loop() {
 61   // Пытаемся прочесть пакет:
 62   xbee.readPacket();
 63 
 64   if (xbee.getResponse().isAvailable()) {
 65     // Что-то получили
 66 
 67     if (xbee.getResponse().getApiId() == ZB_IO_SAMPLE_RESPONSE) {
 68       xbee.getResponse().getZBRxIoSampleResponse(ioSample);
 69 
 70       nss.print("Received I/O Sample from: ");  //  "Получили I/O порцию от: "
 71       
 72       nss.print(ioSample.getRemoteAddress64().getMsb(), HEX);  
 73       nss.print(ioSample.getRemoteAddress64().getLsb(), HEX);  
 74       nss.println("");
 75       
 76       if (ioSample.containsAnalog()) {
 77         nss.println("Sample contains analog data");  //  "Порция содержит аналоговые данные "
 78       }
 79 
 80       if (ioSample.containsDigital()) {
 81         nss.println("Sample contains digtal data");  //  "Порция содержит цифровые данные"
 82       }      
 83 
 84       // Считываем входные аналоговые данные:
 85       for (int i = 0; i <= 4; i++) {
 86         if (ioSample.isAnalogEnabled(i)) {
 87           nss.print("Analog (AI");
 88           nss.print(i, DEC);
 89           nss.print(") is ");
 90           nss.println(ioSample.getAnalog(i), DEC);
 91         }
 92       }
 93 
 94       // Считываем входные цифровые данные:
 95       for (int i = 0; i <= 12; i++) {
 96         if (ioSample.isDigitalEnabled(i)) {
 97           nss.print("Digital (DI");
 98           nss.print(i, DEC);
 99           nss.print(") is ");
100           nss.println(ioSample.isDigitalOn(i), DEC);
101         }
102       }
103       
104       // Отображаем все данные, находящиеся в секции «frame data» API-фрейма:
105       //for (int i = 0; i < xbee.getResponse().getFrameDataLength(); i++) {
106       //  nss.print("byte [");
107       //  nss.print(i, DEC);
108       //  nss.print("] is ");
109       //  nss.println(xbee.getResponse().getFrameData()[i], HEX);
110       //}
111     } 
112     else {
113       nss.print("Expected I/O Sample, but got ");  //  "Ожидалась I/O порция, но получили "
114       nss.print(xbee.getResponse().getApiId(), HEX);
115     }     
116   } else if (xbee.getResponse().isError()) {
117     nss.print("Error reading packet.  Error code: ");  //  "Ошибка при чтении пакета. Код ошибки: "  
118     nss.println(xbee.getResponse().getErrorCode());
119   }
120 }

См.также

Внешние ссылки