Функция displayGPS игнорирует любые сообщения, тип которых отличается от "$GPRMC", и извлекает широту и долготу, а также односимвольные названия полушарий для отображения.
В заключение
В этой главе мы исследовали несколько способов программирования взаимодействий через последовательный интерфейс между платами Arduino, периферийными устройствами и компьютерами.
В следующей главе мы обратим внимание на одну интересную особенность Arduino Leonardo, которая позволяет имитировать поведение периферийных устройств USB, таких как клавиатура и мышь. А также рассмотрим некоторые аспекты программирования интерфейса USB.
8 Похожее описание на русском языке: http://arduino.ru/Reference/Serial. — Примеч. пер.
9 Описание на русском языке: http://arduino.ua/ru/prog/SoftwareSerial. — Примеч. пер.
11. Программирование интерфейса USB
В этой главе рассматриваются разные аспекты использования порта USB на плате Arduino. В том числе возможность эмуляции клавиатуры и мыши, поддерживаемой платой Arduino Leonardo, а также подключения клавиатуры или мыши к соответственно оборудованной плате Arduino.
Эмуляция клавиатуры и мыши
Три модели Arduino — Due, Leonardo и Micro (основанная на модели Leonardo) — позволяют использовать их порт USB для эмуляции клавиатуры или мыши. Существуют также Arduino-совместимые платы, такие как LeoStick от компании Freetronics (рис. 11.1), поддерживающие аналогичную возможность.
Эта возможность широко используется, например, с музыкальными контроллерами, что позволяет плате Arduino взаимодействовать с музыкальными синтезаторами и управляющими программами, такими как Ableton Live. Благодаря ей можно, к примеру, на основе Arduino создавать новые музыкальные инструменты, управляющие музыкальным программным обеспечением с помощью датчиков поворота, прерываемых лучей света или педальной клавиатуры. К несерьезным применениям этой возможности можно отнести устройства, которые создают впечатление, что мышь живет
Рис. 11.1. Плата LeoStick
своей жизнью независимо от действий пользователя или клавиатура сама печатает случайные символы.
Модель Arduino Due имеет два порта USB. Эмуляция клавиатуры и мыши осуществляется через локальный порт USB, а программирование Arduino Due — через порт USB для программирования (рис. 11.2).
Рис. 11.2. Плата Arduino Due с двумя портами USB
Эмуляция клавиатуры
Функции эмуляции клавиатуры просты в использовании. Они входят в состав стандартной библиотеки языка, поэтому для доступа к ним не требуется подключать дополнительные библиотеки. Чтобы включить режим эмуляции клавиатуры, добавьте в функцию setup следующую команду:
Keyboard.begin();
Чтобы заставить Arduino печатать что-нибудь, можно воспользоваться командами print и println, и переданный им текст появится в позиции текстового курсора:
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. Полный список специальных клавиш можно найти по адресу http://arduino.cc/en/Reference/KeyboardModifiers.
ПРИМЕЧАНИЕ
При использовании функций эмуляции клавиатуры и мыши можно столкнуться со сложностями при программировании платы, так как она будет пытаться вводить текст, пока вы пытаетесь запрограммировать ее. Чтобы преодолеть эту проблему, примените следующий трюк: нажмите и удерживайте нажатой кнопку сброса Reset и отпустите ее, только когда в строке состояния Arduino IDE появится сообщение «uploading» («загрузка»).
Пример эмуляции клавиатуры
Следующий пример автоматически вводит текст по вашему выбору (например, пароль) после каждого сброса платы Arduino:
// sketch_11_01_keyboard
char phrase[] = "secretpassword";
void setup()
{
Keyboard.begin();
delay(5000);
Keyboard.println(phrase);
}
void loop()
{
}
Этот пример можно сделать эффективнее, если активировать ввод нажатием внешней клавиши: если вы пользуетесь компьютером Mac, операционная система будет думать, что в момент сброса платы к компьютеру подключается новая клавиатура, и выведет системный диалог, который нужно успеть закрыть до того, как плата напечатает текст.