Хост USB на плате Arduino Due
Плата Arduino Due способна действовать как встроенный хост USB. На момент написания этих строк данная возможность рассматривалась командой разработчиков Arduino как экспериментальная. Загляните в официальную документацию Arduino (http://arduino.cc/en/Reference/USBHost), чтобы определить текущее состояние дел в этой области и выяснить, произошли ли изменения в способе ее использования.
Модель Due не имеет полноразмерного разъема USB, к которому можно было бы подключить клавиатуру или мышь. Для подключения таких устройств требуется использовать кабель Micro USB OTG Host Cable (рис. 11.5). На этом снимке к плате Arduino Due подключен адаптер беспроводной клавиатуры, но точно так же можно подключить обычную клавиатуру USB.
Библиотеки поддержки USB в Arduino Due имеют более простой интерфейс, чем библиотека обслуживания хоста USB, и вместо скан-кодов
Рис. 11.5. Arduino Due с подключенным кабелем Micro USB OTG Host Cable и клавиатурой
возвращают коды ASCII нажатых клавиш. Следующий пример демонстрирует взаимодействие с клавиатурой. Он просто выводит в монитор последовательного порта символы, соответствующие нажатым клавишам:
// sketch_11_05_keyboard_due
#include
USBHost usb;
KeyboardController keyboard(usb);
void setup()
{
Serial.begin(9600);
Serial.println("Program started");
delay(200);
}
void loop()
{
usb.Task();
}
// Эта функция обрабатывает нажатия клавиш
void keyPressed()
{
char key = keyboard.getKey();
Serial.write(key);
}
Библиотека KeyboardController вызывает функцию keyPressed в скетче каждый раз, когда происходит нажатие какой-либо клавиши. Аналогично можно перехватывать отпускания клавиш с помощью функции keyReleased. Чтобы определить нажатую клавишу, необходимо вызвать следующие функции объекта keyboard:
• getModifiers — возвращает битовую маску с информацией об удерживаемых нажатыми клавишах-модификаторах (Shift, Ctrl и т.д.). Коды клавиш модификаторов можно найти по адресу http://arduino.cc/en/Reference/GetModifiers;
• getKey — возвращает код ASCII текущей нажатой клавиши;
• getOemKey — возвращает скан-код клавиши.
Взаимодействие с мышью осуществляется так же просто и с применением похожего шаблона. Следующий пример выводит буквы L, R, U или D в зависимости от направления перемещения указателя мыши — влево, вправо, вверх или вниз:
// sketch_11_06_mouse_due
#include
USBHost usb;
MouseController mouse(usb);
void setup()
{
Serial.begin(9600);
Serial.println("Program started");
delay(200);
}
void loop()
{
usb.Task();
}
// Эта функция обрабатывает перемещения мыши
void mouseMoved()
{
int x = mouse.getXChange();
int y = mouse.getYChange();
if (x > 50) Serial.print("R");
if (x < -50) Serial.print("L");
if (y > 50) Serial.print("D");
if (y < -50) Serial.print("U");
}
Помимо mouseMoved в скетч можно добавить следующие функции для обработки других событий от мыши:
• mouseDragged — это событие генерируется, когда происходит перемещение мыши с нажатой левой кнопкой;
• mousePressed — это событие генерируется, когда происходит нажатие кнопки мыши, и должно сопровождаться вызовом mouse.getButton с аргументом LEFT_BUTTON, RIGHT_BUTTON или MIDDLE_BUTTON для определения нажатой кнопки — возвращает true, если была нажата кнопка, соответствующая аргументу;
• mouseReleased — это событие является парным для mousePressed и генерируется, когда происходит отпускание кнопки.
В заключение
В этой главе мы познакомились с несколькими способами использования Arduino с устройствами USB.
В следующей главе посмотрим, как подключать Arduino к проводным и беспроводным сетям, познакомимся с некоторыми приемами программирования сетевых взаимодействий, а также попробуем использовать платы расширения Ethernet и WiFi.
12. Программирование сетевых взаимодействий
Область Интернета, которую часто называют
Сетевое оборудование
У вас на выбор есть несколько вариантов подключения Arduino к сети. Можно использовать плату расширения Ethernet с Arduino Uno, или приобрести модель Arduino со встроенным адаптером Ethernet, или раскошелиться и приобрести плату расширения WiFi для подключения к беспроводной сети.
Плата расширения Ethernet