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

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

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

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

Контакты:

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


Получение пакетов и преобразование в ШИМ-сигнал (Series 2)[1]

Этот пример показывает, как при помощи библиотеки 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.  
  24. /*
  25. Этот пример – для XBee-модуля Series 2. Он получает RX-пакет ZB, а затем использует эти данные, чтобы задать ШИМ-значение. Если будет получен какой-то непредусмотренный пакет, загорится светодиод, сообщающий об ошибках (errorLed).
  26. */
  27.  
  28. XBee xbee = XBee();
  29. XBeeResponse response = XBeeResponse();
  30. // Создаем многоразовые объекты для обрабатываемых ответов:
  31. ZBRxResponse rx = ZBRxResponse();
  32. ModemStatusResponse msr = ModemStatusResponse();
  33.  
  34. int statusLed = 13;
  35. int errorLed = 13;
  36. int dataLed = 13;
  37.  
  38. void flashLed(int pin, int times, int wait) {
  39.    
  40.     for (int i = 0; i < times; i++) {
  41.       digitalWrite(pin, HIGH);
  42.       delay(wait);
  43.       digitalWrite(pin, LOW);
  44.      
  45.       if (i + 1 < times) {
  46.         delay(wait);
  47.       }
  48.     }
  49. }
  50.  
  51. void setup() {
  52.   pinMode(statusLed, OUTPUT);
  53.   pinMode(errorLed, OUTPUT);
  54.   pinMode(dataLed,  OUTPUT);
  55.  
  56.   // Запускаем последовательную коммуникацию:
  57.   Serial.begin(9600);
  58.   xbee.begin(Serial);
  59.  
  60.   flashLed(statusLed, 3, 50);
  61. }
  62.  
  63. // Постоянно считываем пакеты, ищем RX-пакет ZB или статус модема:
  64. void loop() {
  65.    
  66.     xbee.readPacket();
  67.    
  68.     if (xbee.getResponse().isAvailable()) {
  69.       // Что-то получили
  70.      
  71.       if (xbee.getResponse().getApiId() == ZB_RX_RESPONSE) {
  72.         // Получили RX-пакет ZB
  73.        
  74.         // Теперь заполняем объект «rx»:
  75.         xbee.getResponse().getZBRxResponse(rx);
  76.            
  77.         if (rx.getOption() == ZB_PACKET_ACKNOWLEDGED) {
  78.             // отправитель получил подтверждение
  79.             flashLed(statusLed, 10, 10);
  80.         } else {
  81.             // мы получили пакет, но отправитель не получил подтверждения
  82.             flashLed(errorLed, 2, 20);
  83.         }
  84.         // Задаем ШИМ на светодиоде dataLed в соответствии
  85.         // с первым байтом в данных:
  86.         analogWrite(dataLed, rx.getData(0));
  87.       } else if (xbee.getResponse().getApiId() == MODEM_STATUS_RESPONSE) {
  88.         xbee.getResponse().getModemStatusResponse(msr);
  89.         // Локальный XBee-модуль отправляет это в ответ на
  90.         // определенные события (вроде ассоциации или диссоциации)
  91.        
  92.         if (msr.getStatus() == ASSOCIATED) {
  93.           // Ассоциировались. Здорово! Активируем светодиод
  94.           flashLed(statusLed, 10, 10);
  95.         } else if (msr.getStatus() == DISASSOCIATED) {
  96.           // Диссоциация... Активируем светодиод, чтобы сообщить об этом
  97.           flashLed(errorLed, 10, 10);
  98.         } else {
  99.           // Другой статус
  100.           flashLed(statusLed, 5, 10);
  101.         }
  102.       } else {
  103.         // Не то, что мы ожидали:
  104.         flashLed(errorLed, 1, 25);    
  105.       }
  106.     } else if (xbee.getResponse().isError()) {
  107.       //nss.print("Error reading packet.  Error code: ");  //  "Ошибка при чтении пакета. Код ошибки: "
  108.       //nss.println(xbee.getResponse().getErrorCode());
  109.     }
  110. }

См.также

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

  1. github.com - Series2_Rx.pde