Cat hungry.png
Здравствуйте! Собираем деньги на перевод материалов по электронике(https://www.allaboutcircuits.com/education/). Реквизиты указаны здесь.

Arduino:Примеры/Series2 Rx Nss

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

Перевод: Максим Кузьмин (Cubewriter)
Перевел 2686 статей для сайта.

Контакты:

Проверка/Оформление/Редактирование: Мякишев Е.А.


Получение и отображение пакетов (Series 2)[1]

Этот пример показывает, как при помощи библиотеки XBee настроить XBee-модуль типа Series 2 на получение пакетов типа ZB, а также их отображение через коммуникацию SoftSerial.

Код

  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. Он получает RX-пакет типа ZB и
  27. отображает его через SoftSerial.
  28. */
  29.  
  30. XBee xbee = XBee();
  31. XBeeResponse response = XBeeResponse();
  32. // Создаем многоразовые объекты для обрабатываемых ответов:
  33. ZBRxResponse rx = ZBRxResponse();
  34. ModemStatusResponse msr = ModemStatusResponse();
  35.  
  36. // Задаем TX и RX контакты для NewSoftSerial.
  37. // Подключаем 8-ой контакт Arduino к TX-контакту конвертера USB-Serial:
  38. uint8_t ssRX = 8;
  39. // Подключаем 9-ый контакт Arduino к RX-контакту конвертера USB-Serial:
  40. uint8_t ssTX = 9;
  41. // Не забудьте подключить все устройства к общей «земле»: XBee,
  42. // Arduino и конвертер USB-Serial
  43.  SoftwareSerial nss(ssRX, ssTX);
  44.  
  45.  
  46. void setup() {  
  47.   // Запускаем коммуникацию SoftSerial:
  48.   Serial.begin(9600);
  49.   xbee.setSerial(Serial);
  50.   nss.begin(9600);
  51.  
  52.   nss.println("Starting up!");  //  "Запуск!"
  53. }
  54.  
  55. // Постоянно считываем пакеты, ищем RX-пакет типа ZB или статус модема:
  56. void loop() {
  57.    
  58.     xbee.readPacket();
  59.    
  60.     if (xbee.getResponse().isAvailable()) {
  61.       // Что-то получили
  62.            
  63.       if (xbee.getResponse().getApiId() == ZB_RX_RESPONSE) {
  64.         // Получили RX-пакет типа ZB
  65.        
  66.         // Теперь заполняем объект «rx»:
  67.         xbee.getResponse().getZBRxResponse(rx);
  68.      
  69.         nss.println("Got an rx packet!");  //  "Получили RX-пакет!"
  70.            
  71.         if (rx.getOption() == ZB_PACKET_ACKNOWLEDGED) {
  72.             // Отправитель получил подтверждение:
  73.             nss.println("packet acknowledged");  //  "Пакет подтвержден!"
  74.         } else {
  75.           nss.println("packet not acknowledged");  //  "Пакет не подтвержден!"
  76.         }
  77.        
  78.         nss.print("checksum is ");  //  "Контрольная сумма: "
  79.         nss.println(rx.getChecksum(), HEX);
  80.  
  81.         nss.print("packet length is ");  //  "Длина пакета: "
  82.         nss.println(rx.getPacketLength(), DEC);
  83.        
  84.          for (int i = 0; i < rx.getDataLength(); i++) {
  85.           nss.print("payload [");  //  "Полезная нагрузка ["
  86.           nss.print(i, DEC);
  87.           nss.print("] is ");
  88.           nss.println(rx.getData()[i], HEX);
  89.         }
  90.        
  91.        for (int i = 0; i < xbee.getResponse().getFrameDataLength(); i++) {
  92.         nss.print("frame data [");  //  "Данные фрейма ["
  93.         nss.print(i, DEC);
  94.         nss.print("] is ");
  95.         nss.println(xbee.getResponse().getFrameData()[i], HEX);
  96.       }
  97.       }
  98.     } else if (xbee.getResponse().isError()) {
  99.       nss.print("error code:");  //  "Код ошибки: "
  100.       nss.println(xbee.getResponse().getErrorCode());
  101.     }
  102. }

См.также

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

  1. github.com - Series2_Rx_Nss.pde