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

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

Перевод: Максим Кузьмин (Cubewriter) Контакты:</br>* Skype: cubewriter</br>* E-mail: cubewriter@gmail.com</br>* Максим Кузьмин на freelance.ru
Проверка/Оформление/Редактирование: Мякишев Е.А.


Отправка пакетов[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 }

См.также

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