Читаем Программируем Arduino полностью

При первом запуске интерфейс USB переходит в состояние настройки USB_STATE_CONFIGURING, в котором находится, пока с помощью kbd_init не будет установлено соединение с клавиатурой. Эта функция использует структуру записи конечной точки (ep_record), куда помещаются части сообщения, необходимого для установки соединения с клавиатурой:

ep_record[ 0 ] = *( Usb.getDevTableEntry( 0,0 ));

ep_record[ 1 ].MaxPktSize = EP_MAXPKTSIZE;

ep_record[ 1 ].Interval  = EP_POLL;

ep_record[ 1 ].sndToggle = bmSNDTOG0;

ep_record[ 1 ].rcvToggle = bmRCVTOG0;

Usb.setDevTableEntry( 1, ep_record );

/* Настроить устройство */

rcode = Usb.setConf( KBD_ADDR, 0, 1 );

После инициализации, вероятнее всего, клавиатура перейдет в состояние нормального функционирования (USB_STATE_RUNNING), обнаружив которое скетч вызовет kbd_poll для проверки нажатия клавиши на клавиатуре.

Ключевая строка в 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 (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:

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных