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

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

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


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

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

Код

  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 1. Он принимает 
 27 данные от удаленного XBee-модуля с 16-битным адресом. У удаленного 
 28 XBee-модуля IR должно быть больше «0», должен быть активирован как 
 29 минимум один цифровой или аналоговый входной контакт, а также DL 
 30 должен быть выставлен на 16-битный адрес принимающего XBee-модуля 
 31 (того, что подключен к Arduino).
 32 
 33 Чтобы видеть информацию об XBee-коммуникации, этот пример использует 
 34 библиотеку SoftSerial. Я использую плату Modern Device USB BUB
 35 (http://moderndevice.com/connect) и просматриваю выдачу при помощи 
 36 монитора порта в IDE Arduino.
 37 */
 38 
 39 // Задаем TX и RX контакты для NewSoftSerial.
 40 // Подключаем 8-ой контакт Arduino к TX-контакту конвертера USB-Serial:
 41 uint8_t ssRX = 8; 
 42 // Подключаем 9-ый контакт Arduino к RX-контакту конвертера USB-Serial:
 43 uint8_t ssTX = 9;
 44 // Не забудьте подключить все устройства к общей «земле»: XBee, 
 45 // Arduino и конвертер USB-Serial
 46 SoftwareSerial nss(ssRX, ssTX);
 47 
 48 XBee xbee = XBee();
 49 
 50 Rx16IoSampleResponse ioSample = Rx16IoSampleResponse();
 51 // 64-битный ответ – тот же, за исключением того, что API ID 
 52 // эквивалентен RX_64_IO_RESPONSE и возвращает 64-битный адрес:
 53 //Rx64IoSampleResponse ioSample = Rx64IoSampleResponse();
 54 
 55 void setup() { 
 56   Serial.begin(9600);
 57   xbee.setSerial(Serial);
 58   // Запускаем коммуникацию SoftSerial:
 59   nss.begin(9600);
 60 }
 61 
 62 void loop() {
 63   // Пытаемся прочесть пакет: 
 64   xbee.readPacket();
 65 
 66   if (xbee.getResponse().isAvailable()) {
 67     // Что-то получили
 68 
 69     if (xbee.getResponse().getApiId() == RX_16_IO_RESPONSE) {
 70       xbee.getResponse().getRx16IoSampleResponse(ioSample);
 71 
 72       nss.print("Received I/O Sample from: ");  //  "Получили I/O порцию от: "
 73       nss.println(ioSample.getRemoteAddress16(), HEX);  
 74 
 75       nss.print("Sample size is ");  //  "Размер порции "
 76       nss.println(ioSample.getSampleSize(), DEC);
 77 
 78       if (ioSample.containsAnalog()) {
 79         nss.println("Sample contains analog data");    //  "Порция содержит аналоговые данные "
 80       }
 81 
 82       if (ioSample.containsDigital()) {
 83         nss.println("Sample contains digital data");  //  "Порция содержит цифровые данные"
 84       }
 85       
 86       for (int k = 0; k < ioSample.getSampleSize(); k++) {
 87         nss.print("Sample ");  //  "Порция "
 88         nss.print(k + 1, DEC);   
 89         nss.println(":");    
 90         
 91         for (int i = 0; i <= 5; i++) {
 92           if (ioSample.isAnalogEnabled(i)) {
 93             nss.print("Analog (AI");  //  "Аналоговый (АI"
 94             nss.print(i, DEC);
 95             nss.print(") is ");
 96             nss.println(ioSample.getAnalog(i, k));  
 97           }
 98         }
 99         
100         for (int i = 0; i <= 8; i++) {
101            if (ioSample.isDigitalEnabled(i)) {
102             nss.print("Digtal (DI");   //  "Цифровой (АI"
103             nss.print(i, DEC);
104             nss.print(") is ");
105             nss.println(ioSample.isDigitalOn(i, k));
106           }
107         }
108       }
109     } 
110     else {
111       nss.print("Expected I/O Sample, but got ");  //  "Ожидалась I/O порция, но получили "
112       nss.print(xbee.getResponse().getApiId(), HEX);
113     } 
114   } 
115   else if (xbee.getResponse().isError()) {
116     nss.print("Error reading packet.  Error code: ");  //  "Ошибка при чтении пакета. Код ошибки: "
117     nss.println(xbee.getResponse().getErrorCode());
118   }
119 }

См.также

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