Программируем Arduino. Основы работы со скетчами
Шрифт:
Keyboard.println("It was the best of times.");
Чтобы сымитировать нажатие клавиш-модификаторов, например ввести комбинацию CTRL+C, используйте команду press:
Keyboard.press(KEY_LEFT_CTRL);
Keyboard.press('x');
delay(100);
Keyboard.releasrAll;
Команда press имеет односимвольный параметр, в котором ей можно передавать любые обычные символы или предопределенные константы, такие как KEY_LEFT_CTRL. После вызова команды press плата будет имитировать удержание клавиши в нажатом состоянии, пока не будет вызвана команда releaseAll. Полный список специальных клавиш можно
ПРИМЕЧАНИЕ
При использовании функций эмуляции клавиатуры и мыши можно столкнуться со сложностями при программировании платы, так как она будет пытаться вводить текст, пока вы пытаетесь запрограммировать ее. Чтобы преодолеть эту проблему, примените следующий трюк: нажмите и удерживайте нажатой кнопку сброса Reset и отпустите ее, только когда в строке состояния Arduino IDE появится сообщение «uploading» («загрузка»).
Пример эмуляции клавиатуры
Следующий пример автоматически вводит текст по вашему выбору (например, пароль) после каждого сброса платы Arduino:
// sketch_11_01_keyboard
char phrase[] = "secretpassword";
void setup
{
Keyboard.begin;
delay(5000);
Keyboard.println(phrase);
}
void loop
{
}
Этот пример можно сделать эффективнее, если активировать ввод нажатием внешней клавиши: если вы пользуетесь компьютером Mac, операционная система будет думать, что в момент сброса платы к компьютеру подключается новая клавиатура, и выведет системный диалог, который нужно успеть закрыть до того, как плата напечатает текст.
Эмуляция мыши
Эмуляция мыши реализуется с применением того же шаблона, что и эмуляция клавиатуры. Вообще говоря, нет никаких причин, препятствующих эмуляции обоих устройств ввода в одном скетче.
Чтобы запустить эмуляцию, прежде всего следует выполнить команду
Mouse.begin;
Управление указателем мыши осуществляется командой Mouse.move. Она имеет три параметра: смещение по осям x и y и поворот колесика. Все три параметра измеряются в пикселах. Эти значения могут быть положительными (смещение указателя вправо или вниз) или отрицательными (смещение указателя влево или вверх). Смещения откладываются относительно текущей позиции указателя, а так как нет никакой возможности указать абсолютные координаты указателя, эта команда лишь имитирует поведение мыши, перемещающей указатель, но не управляет самим указателем.
Сымитировать щелчок мышью можно с помощью команды click. Без параметров эта команда имитирует щелчок левой кнопкой мыши. При желании ей можно передать аргумент MOUSE_RIGHT или MOUSE_MIDDLE.
Для управления длительностью щелчка можно использовать команды Mouse.press и Mouse.release. Команда Mouse.press принимает те же необязательные аргументы, что и команда Mouse.click. Эти две команды могут пригодиться, например, чтобы заставить свою «мышь» на основе Arduino выполнять щелчок при изменении состояния цифрового входа на плате. Кроме того, с их помощью можно сымитировать двойной или даже тройной щелчок.
Пример эмуляции мыши
Следующий пример перемещает указатель мыши по экрану в случайных направлениях. Чтобы прервать программу и восстановить управление компьютером, нажмите и удерживайте кнопку сброса Reset или просто отсоедините плату от компьютера.
// sketch_11_02_mouse
void setup
{
Mouse.begin;
}
void loop
}
int x=random(61)-30;
int y=random(61)-30;
Mouse.move(x, y);
delay(50);
}
Программирование хоста USB
Модели Leonardo, Due и Micro имеют возможность действовать как клавиатура или мышь, но только Due и менее известная модель Arduino Mega ADK позволяют подключать клавиатуру или мышь и использовать их в качестве устройств ввода. Эта особенность называется хостом USB (USB Host). Непосредственная поддержка этой особенности реализована только в модели Due, тем не менее существуют платы сторонних производителей, которые можно подключать к Arduino Uno или Leonardo, чтобы получить собственный хост USB.
Более того, если у вас имеется беспроводная клавиатура или мышь (за исключением моделей, подключаемых через Bluetooth), они также должны работать, если включить адаптер в разъем порта USB на плате расширения. Таким способом можно организовать беспроводное удаленное управление платой Arduino.
Хост USB позволяет подключать не только клавиатуру и мышь, но и множество других периферийных устройств USB: игровые джойстики, камеры, Bluetooth-устройства и даже телефоны на платформе Android.
Плата хоста USB и библиотека
Плата хоста USB и сопутствующие библиотеки созданы довольно давно и в настоящее время поддерживают широкий диапазон периферийных устройств. Первая плата хоста USB была разработана в Circuits@home (www.circuitsathome.com). Нынче доступны совместимые платы USB, производимые компаниями Sparkfun, SainSmart и, возможно, другими. На рис. 11.3 изображена плата Sparkfun USB Host, подключенная к Arduino Uno. Обратите внимание на то, что на момент написания данных строк эти платы были несовместимы с Arduino Leonardo, а также с другими моделями, более экзотичными, чем Uno. Поэтому перед приобретением убедитесь в совместимости плат.
Рис. 11.3. Плата Sparkfun USB Host
Данная конкретная плата имеет область, удобную для макетирования, где можно спаять дополнительные компоненты. Альтернативой платам расширения может служить плата Freetronics USBDroid (рис. 11.4). На ней имеются два порта USB: порт микроUSB для программирования и полноразмерный разъем USB для подключения клавиатуры и подобных устройств.
Рис. 11.4. Плата Freetronics USBDroid