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

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

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


Отправка пакетов (Series 2)[1]

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

Код

/**
 * Автор – Эндрю Рэпп (Andrew Rapp). 2009 год, все права защищены.
 *
 * Этот файл – часть библиотеки XBee-Arduino.
 *
 * Библиотека XBee для Arduino – это бесплатное ПО: его можно 
 * распространять и/или модифицировать согласно условиям Универсальной 
 * общественной лицензии GNU, изданной Фондом свободного ПО – будь то 
 * 3-тья или более поздняя версия этой лицензии (на ваш выбор).
 *
 * Библиотека XBee-Arduino распространяется бесплатно в надежде на то, 
 * что окажется полезной, но БЕЗО ВСЯКОЙ ГАРАНТИИ; включая даже 
 * обязательную гарантию на КОММЕРЧЕСКОЕ КАЧЕСТВО и ПРИГОДНОСТЬ 
 * КОНКРЕТНОЙ ЦЕЛИ. Более подробно читайте в Универсальной 
 * общественной лицензии GNU.
 *
 * Вы должны получить копию Универсальной общественной лицензии GNU 
 * вместе с библиотекой XBee-Arduino. Если не получили, ее можно найти 
 * на http://www.gnu.org/licenses/.
 */

#include <XBee.h>

/*
Этот пример – для XBee-модуля типа Series 2. Он отправляет запрос ZB TX со значением analogRead(pin5), а затем получает ответ и проверяет, успешно ли была проведена эта операция.
*/

// Создаем объект XBee:
XBee xbee = XBee();

uint8_t payload[] = { 0, 0 };

// Адрес (SH + SL) XBee-модуля, получающего пакет:
XBeeAddress64 addr64 = XBeeAddress64(0x0013a200, 0x403e0f30);
ZBTxRequest zbTx = ZBTxRequest(addr64, payload, sizeof(payload));
ZBTxStatusResponse txStatus = ZBTxStatusResponse();

int pin5 = 0;

int statusLed = 13;
int errorLed = 13;

void flashLed(int pin, int times, int wait) {

  for (int i = 0; i < times; i++) {
    digitalWrite(pin, HIGH);
    delay(wait);
    digitalWrite(pin, LOW);

    if (i + 1 < times) {
      delay(wait);
    }
  }
}

void setup() {
  pinMode(statusLed, OUTPUT);
  pinMode(errorLed, OUTPUT);

  Serial.begin(9600);
  xbee.setSerial(Serial);
}

void loop() {   
  // Разбиваем 10-битное значение на два байта и помещаем их 
  // в полезную нагрузку:
  pin5 = analogRead(5);
  payload[0] = pin5 >> 8 & 0xff;
  payload[1] = pin5 & 0xff;

  xbee.send(zbTx);

  // Активируем TX-индикатор:
  flashLed(statusLed, 1, 100);

  // После отправки TX-запроса 5 секунд ждем ответа со статусом:
  if (xbee.readPacket(500)) {
    // Получили ответ!

    // Должен быть статус «znet tx»:
    if (xbee.getResponse().getApiId() == ZB_TX_STATUS_RESPONSE) {
      xbee.getResponse().getZBTxStatusResponse(txStatus);

      // Получаем подтверждение о доставке (пятый байт):
      if (txStatus.getDeliveryStatus() == SUCCESS) {
        // Успешно, ура!
        flashLed(statusLed, 5, 50);
      } else {
        // Удаленный XBee-модуль не получил наш пакет. Он включен?
        flashLed(errorLed, 3, 500);
      }
    }
  } else if (xbee.getResponse().isError()) {
    //nss.print("Error reading packet.  Error code: ");  //  "Ошибка при чтении пакета. Код ошибки: "
    //nss.println(xbee.getResponse().getErrorCode());
  } else { 
    // Локальный XBee-модуль не дает своевременных ответов о статусе 
    // (такого быть не должно):
    flashLed(errorLed, 2, 50);
  }

  delay(1000);
}

См.также

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