Arduino:Примеры/Series1 IoSamples
Перейти к навигации
Перейти к поиску
Поддержать проект | Содержание | Знакомство с Arduino | Продукты | Основы | Справочник языка Arduino | Примеры | Библиотеки | Хакинг | Изменения | Сравнение языков Arduino и Processing |
Перевод: Максим Кузьмин (Cubewriter) Контакты:</br>* Skype: cubewriter</br>* E-mail: cubewriter@gmail.com</br>* Максим Кузьмин на freelance.ru
Проверка/Оформление/Редактирование: Мякишев Е.А.
Получение данных от удаленного XBee-модуля[1]
Этот пример показывает, как при помощи библиотеки XBee настроить 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 #include <XBee.h>
23 #include <SoftwareSerial.h>
24
25 /*
26 Этот пример – только для XBee-модулей типа Series 1. Он принимает
27 данные от удаленного XBee-модуля с 16-битным адресом. У удаленного
28 XBee-модуля IR должно быть больше «0», должен быть активирован как
29 минимум один цифровой или аналоговый входной контакт, а также DL
30 должен быть выставлен на 16-битный адрес принимающего XBee-модуля
31 (того, что подключен к Arduino).
32
33 Чтобы видеть информацию об XBee-коммуникации, этот пример использует
34 библиотеку SoftSerial. Я использую плату Modern Device USB BUB
35 (http://moderndevice.com/connect) и просматриваю выдачу при помощи
36 монитора порта в IDE Arduino.
37 */
38
39 // Задаем TX и RX контакты для NewSoftSerial.
40 // Подключаем 8-ой контакт Arduino к TX-контакту конвертера USB-Serial:
41 uint8_t ssRX = 8;
42 // Подключаем 9-ый контакт Arduino к RX-контакту конвертера USB-Serial:
43 uint8_t ssTX = 9;
44 // Не забудьте подключить все устройства к общей «земле»: XBee,
45 // Arduino и конвертер USB-Serial
46 SoftwareSerial nss(ssRX, ssTX);
47
48 XBee xbee = XBee();
49
50 Rx16IoSampleResponse ioSample = Rx16IoSampleResponse();
51 // 64-битный ответ – тот же, за исключением того, что API ID
52 // эквивалентен RX_64_IO_RESPONSE и возвращает 64-битный адрес:
53 //Rx64IoSampleResponse ioSample = Rx64IoSampleResponse();
54
55 void setup() {
56 Serial.begin(9600);
57 xbee.setSerial(Serial);
58 // Запускаем коммуникацию SoftSerial:
59 nss.begin(9600);
60 }
61
62 void loop() {
63 // Пытаемся прочесть пакет:
64 xbee.readPacket();
65
66 if (xbee.getResponse().isAvailable()) {
67 // Что-то получили
68
69 if (xbee.getResponse().getApiId() == RX_16_IO_RESPONSE) {
70 xbee.getResponse().getRx16IoSampleResponse(ioSample);
71
72 nss.print("Received I/O Sample from: "); // "Получили I/O порцию от: "
73 nss.println(ioSample.getRemoteAddress16(), HEX);
74
75 nss.print("Sample size is "); // "Размер порции "
76 nss.println(ioSample.getSampleSize(), DEC);
77
78 if (ioSample.containsAnalog()) {
79 nss.println("Sample contains analog data"); // "Порция содержит аналоговые данные "
80 }
81
82 if (ioSample.containsDigital()) {
83 nss.println("Sample contains digital data"); // "Порция содержит цифровые данные"
84 }
85
86 for (int k = 0; k < ioSample.getSampleSize(); k++) {
87 nss.print("Sample "); // "Порция "
88 nss.print(k + 1, DEC);
89 nss.println(":");
90
91 for (int i = 0; i <= 5; i++) {
92 if (ioSample.isAnalogEnabled(i)) {
93 nss.print("Analog (AI"); // "Аналоговый (АI"
94 nss.print(i, DEC);
95 nss.print(") is ");
96 nss.println(ioSample.getAnalog(i, k));
97 }
98 }
99
100 for (int i = 0; i <= 8; i++) {
101 if (ioSample.isDigitalEnabled(i)) {
102 nss.print("Digtal (DI"); // "Цифровой (АI"
103 nss.print(i, DEC);
104 nss.print(") is ");
105 nss.println(ioSample.isDigitalOn(i, k));
106 }
107 }
108 }
109 }
110 else {
111 nss.print("Expected I/O Sample, but got "); // "Ожидалась I/O порция, но получили "
112 nss.print(xbee.getResponse().getApiId(), HEX);
113 }
114 }
115 else if (xbee.getResponse().isError()) {
116 nss.print("Error reading packet. Error code: "); // "Ошибка при чтении пакета. Код ошибки: "
117 nss.println(xbee.getResponse().getErrorCode());
118 }
119 }
См.также
Внешние ссылки