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

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

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


Получение пакетов и преобразование в ШИМ-сигнал (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 }

См.также

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