Вход/Регистрация
Программируем Arduino. Основы работы со скетчами
вернуться

Монк Саймон

Шрифт:

Ключевая строка в kbd_poll

rcode = Usb.inTransfer( KBD_ADDR, KBD_EP, 8, buf );

читает скан-код клавиши, чтобы определить, была ли нажата какая-нибудь клавиша. Этот код не является кодом ASCII. Преобразование скан-кодов в коды ASCII осуществляется в функции HIDtoA. Эта функция — самая сложная в скетче, но вы можете просто копировать ее в свои скетчи, не вдаваясь в детали ее работы. Список скан-кодов и порядок их преобразования в коды ASCII можно найти по адресу www.win.tue.nl/~aeb/linux/kbd/scancodes-1.html.

Одной из интересных особенностей протокола USB-устройств для взаимодействия с человеком (Human Interface Device, HID), используемого для работы с клавиатурой, является возможность управления светодиодными индикаторами Scroll Lock, Caps Lock и Num Lock. Функция kbd_poll включает и выключает эти индикаторы в ответ на нажатия клавиш Scroll Lock, Caps Lock и Num Lock, однако вы можете написать коротенький скетч, например sketch_11_04_host_scroll_lock, который просто мигает светодиодными индикаторами на клавиатуре.

Ключевая функция в этом скетче:

void toggleLEDs( void )

{

if (leds == 0) {

leds = 0b00000111;

}

else {

leds = 0;

}

Usb.setReport( KBD_ADDR, 0, 1, KBD_IF, 0x02, 0, &leds );

}

Три младших бита в байте — это три флага, управляющих состояниями индикаторов на клавиатуре.

Хост USB на плате Arduino Due

Плата Arduino Due способна действовать как встроенный хост USB. На момент написания этих строк данная возможность рассматривалась командой разработчиков Arduino как экспериментальная. Загляните в официальную документацию Arduino , чтобы определить текущее состояние дел в этой области и выяснить, произошли ли изменения в способе ее использования.

Модель 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 <KeyboardController.h>

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 <MouseController.h>

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");

  • Читать дальше
  • 1
  • ...
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: