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

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

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

Перевод: Максим Кузьмин (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. Он отправляет запрос ZB TX со значением analogRead(pin5), а затем получает ответ и проверяет, успешно ли была проведена эта операция.
  26. */
  27.  
  28. // Создаем объект XBee:
  29. XBee xbee = XBee();
  30.  
  31. uint8_t payload[] = { 0, 0 };
  32.  
  33. // Адрес (SH + SL) XBee-модуля, получающего пакет:
  34. XBeeAddress64 addr64 = XBeeAddress64(0x0013a200, 0x403e0f30);
  35. ZBTxRequest zbTx = ZBTxRequest(addr64, payload, sizeof(payload));
  36. ZBTxStatusResponse txStatus = ZBTxStatusResponse();
  37.  
  38. int pin5 = 0;
  39.  
  40. int statusLed = 13;
  41. int errorLed = 13;
  42.  
  43. void flashLed(int pin, int times, int wait) {
  44.  
  45.   for (int i = 0; i < times; i++) {
  46.     digitalWrite(pin, HIGH);
  47.     delay(wait);
  48.     digitalWrite(pin, LOW);
  49.  
  50.     if (i + 1 < times) {
  51.       delay(wait);
  52.     }
  53.   }
  54. }
  55.  
  56. void setup() {
  57.   pinMode(statusLed, OUTPUT);
  58.   pinMode(errorLed, OUTPUT);
  59.  
  60.   Serial.begin(9600);
  61.   xbee.setSerial(Serial);
  62. }
  63.  
  64. void loop() {  
  65.   // Разбиваем 10-битное значение на два байта и помещаем их
  66.   // в полезную нагрузку:
  67.   pin5 = analogRead(5);
  68.   payload[0] = pin5 >> 8 & 0xff;
  69.   payload[1] = pin5 & 0xff;
  70.  
  71.   xbee.send(zbTx);
  72.  
  73.   // Активируем TX-индикатор:
  74.   flashLed(statusLed, 1, 100);
  75.  
  76.   // После отправки TX-запроса 5 секунд ждем ответа со статусом:
  77.   if (xbee.readPacket(500)) {
  78.     // Получили ответ!
  79.  
  80.     // Должен быть статус «znet tx»:
  81.     if (xbee.getResponse().getApiId() == ZB_TX_STATUS_RESPONSE) {
  82.       xbee.getResponse().getZBTxStatusResponse(txStatus);
  83.  
  84.       // Получаем подтверждение о доставке (пятый байт):
  85.       if (txStatus.getDeliveryStatus() == SUCCESS) {
  86.         // Успешно, ура!
  87.         flashLed(statusLed, 5, 50);
  88.       } else {
  89.         // Удаленный XBee-модуль не получил наш пакет. Он включен?
  90.         flashLed(errorLed, 3, 500);
  91.       }
  92.     }
  93.   } else if (xbee.getResponse().isError()) {
  94.     //nss.print("Error reading packet.  Error code: ");  //  "Ошибка при чтении пакета. Код ошибки: "
  95.     //nss.println(xbee.getResponse().getErrorCode());
  96.   } else {
  97.     // Локальный XBee-модуль не дает своевременных ответов о статусе
  98.     // (такого быть не должно):
  99.     flashLed(errorLed, 2, 50);
  100.   }
  101.  
  102.   delay(1000);
  103. }

См.также

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

  1. github.com - Series2_Tx.pde