Arduino:Примеры/Series2 Rx
Перейти к навигации
Перейти к поиску
Поддержать проект | Содержание | Знакомство с Arduino | Продукты | Основы | Справочник языка Arduino | Примеры | Библиотеки | Хакинг | Изменения | Сравнение языков Arduino и Processing |
Перевод: Максим Кузьмин (Cubewriter) Контакты:</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 }
См.также
Внешние ссылки