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

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

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

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

Контакты:

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


Отправка пакетов[1]

Этот пример показывает, как при помощи библиотеки 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.  
  23. #include <XBee.h>
  24.  
  25. /*
  26. Этот пример – для XBee-модуля Series 1.
  27. Он отправляет запрос TX16 или TX64 со значением analogRead(pin5) и проверяет, успешно ли закончилась операция. Примечание: в моем случае XBee-модуль начинал сообщать об успехе спустя около 15 секунд, поэтому при запуске я добавил задержку.
  28. */
  29.  
  30. XBee xbee = XBee();
  31.  
  32. unsigned long start = millis();
  33.  
  34. // Выделяем два байта для хранения 10-битных аналоговых данных,
  35. // которые будут прочитаны:
  36. uint8_t payload[] = { 0, 0 };
  37.  
  38. // Для XBee-модуля типа Series 1 можно использовать и 16-битный, и 64-битный адреса
  39.  
  40. // 16-битный адрес: введите адрес удаленного XBee-модуля (как правило, это координатор):
  41. Tx16Request tx = Tx16Request(0x1874, payload, sizeof(payload));
  42.  
  43. // 64-битный адрес: это адрес (SH + SL) удаленного XBee-модуля:
  44. // XBeeAddress64 addr64 = XBeeAddress64(0x0013a200, 0x4008b490);
  45. // Будет отправляться пакет RX16, за исключением случаев, когда
  46. // значение MY у принимающего модуля не выставлено на «FFFF».
  47. // Tx64Request tx = Tx64Request(addr64, payload, sizeof(payload));
  48.  
  49. TxStatusResponse txStatus = TxStatusResponse();
  50.  
  51. int pin5 = 0;
  52.  
  53. int statusLed = 11;
  54. int errorLed = 12;
  55.  
  56. void flashLed(int pin, int times, int wait) {
  57.    
  58.     for (int i = 0; i < times; i++) {
  59.       digitalWrite(pin, HIGH);
  60.       delay(wait);
  61.       digitalWrite(pin, LOW);
  62.      
  63.       if (i + 1 < times) {
  64.         delay(wait);
  65.       }
  66.     }
  67. }
  68.  
  69. void setup() {
  70.   pinMode(statusLed, OUTPUT);
  71.   pinMode(errorLed, OUTPUT);
  72.   Serial.begin(9600);
  73.   xbee.setSerial(Serial);
  74. }
  75.  
  76. void loop() {
  77.    
  78.    // Запускаем передачу данных после задержки при запуске.
  79.    // Примечание: Возможно, не самое лучшее решение, потому что это
  80.    // значение в конце концов откатится к «0»:
  81.     if (millis() - start > 15000) {
  82.       // Разбиваем считанное 10-битное значение на два байта
  83.       // и размещаем их в полезной нагрузке:
  84.       pin5 = analogRead(5);
  85.       payload[0] = pin5 >> 8 & 0xff;
  86.       payload[1] = pin5 & 0xff;
  87.      
  88.       xbee.send(tx);
  89.  
  90.       // Активируем TX-светодиод:
  91.       flashLed(statusLed, 1, 100);
  92.     }
  93.  
  94.     // После отправки TX-запроса 5 секунд ждем статусного ответа.
  95.     if (xbee.readPacket(5000)) {
  96.         // Ответ получен!
  97.  
  98.         // Должен быть статус ZNET TX:                 
  99.         if (xbee.getResponse().getApiId() == TX_STATUS_RESPONSE) {
  100.            xbee.getResponse().getTxStatusResponse(txStatus);
  101.                
  102.            // Получаем статус о доставке пакета, пятый байт:
  103.            if (txStatus.getStatus() == SUCCESS) {
  104.                 // Успех. Время праздновать!
  105.                 flashLed(statusLed, 5, 50);
  106.            } else {
  107.                 // Удаленный XBee-модуль не получил наш пакет.
  108.                 // Он включен?
  109.                 flashLed(errorLed, 3, 500);
  110.            }
  111.         }      
  112.     } else if (xbee.getResponse().isError()) {
  113.       //nss.print("Error reading packet.  Error code: ");  //  "Ошибка при чтении пакета. Код ошибки: "
  114.       //nss.println(xbee.getResponse().getErrorCode());
  115.       // ...или активируем светодиод, сообщающий об ошибках
  116.     } else {
  117.       // Локальный XBee-модуль не дает своевременного
  118.       // статусного TX-ответа. Это значит, что он либо неправильно
  119.       // настроен, либо не подключен.
  120.       flashLed(errorLed, 2, 50);
  121.     }
  122.    
  123.     delay(1000);
  124. }

См.также

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

  1. github.com - Series1_Tx.pde