Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΡƒΠ΅ΠΌ Arduino. ΠžΡΠ½ΠΎΠ²Ρ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ со скСтчами». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 36

Автор Монк Π‘Π°ΠΉΠΌΠΎΠ½

ΠŸΠ»Π°Ρ‚Π° хоста USB ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°

ΠŸΠ»Π°Ρ‚Π° хоста USB ΠΈ ΡΠΎΠΏΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ созданы довольно Π΄Π°Π²Π½ΠΎ ΠΈ Π² настоящСС врСмя ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ ΡˆΠΈΡ€ΠΎΠΊΠΈΠΉ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ ΠΏΠ΅Ρ€ΠΈΡ„Π΅Ρ€ΠΈΠΉΠ½Ρ‹Ρ… устройств. ΠŸΠ΅Ρ€Π²Π°Ρ ΠΏΠ»Π°Ρ‚Π° хоста USB Π±Ρ‹Π»Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π° Π² [email protected] (www.circuitsathome.com). НынчС доступны совмСстимыС ΠΏΠ»Π°Ρ‚Ρ‹ USB, ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠΌΡ‹Π΅ компаниями Sparkfun, SainSmart ΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ. На рис. 11.3 ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½Π° ΠΏΠ»Π°Ρ‚Π° Sparkfun USB Host, ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Π°Ρ ΠΊ Arduino Uno. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚ написания Π΄Π°Π½Π½Ρ‹Ρ… строк эти ΠΏΠ»Π°Ρ‚Ρ‹ Π±Ρ‹Π»ΠΈ нСсовмСстимы с Arduino Leonardo, Π° Ρ‚Π°ΠΊΠΆΠ΅ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ модСлями, Π±ΠΎΠ»Π΅Π΅ экзотичными, Ρ‡Π΅ΠΌ Uno. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΏΠ΅Ρ€Π΅Π΄ ΠΏΡ€ΠΈΠΎΠ±Ρ€Π΅Ρ‚Π΅Π½ΠΈΠ΅ΠΌ ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ Π² совмСстимости ΠΏΠ»Π°Ρ‚.

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΡƒΠ΅ΠΌ Arduino. ΠžΡΠ½ΠΎΠ²Ρ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ со скСтчами - _76.jpg

Рис. 11.3. ΠŸΠ»Π°Ρ‚Π° Sparkfun USB Host

Данная конкрСтная ΠΏΠ»Π°Ρ‚Π° ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ, ΡƒΠ΄ΠΎΠ±Π½ΡƒΡŽ для макСтирования, Π³Π΄Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΏΠ°ΡΡ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹. ΠΠ»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²ΠΎΠΉ ΠΏΠ»Π°Ρ‚Π°ΠΌ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ»ΡƒΠΆΠΈΡ‚ΡŒ ΠΏΠ»Π°Ρ‚Π° Freetronics USBDroid (рис. 11.4). На Π½Π΅ΠΉ ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ Π΄Π²Π° ΠΏΠΎΡ€Ρ‚Π° USB: ΠΏΠΎΡ€Ρ‚ ΠΌΠΈΠΊΡ€ΠΎUSB для программирования ΠΈ ΠΏΠΎΠ»Π½ΠΎΡ€Π°Π·ΠΌΠ΅Ρ€Π½Ρ‹ΠΉ Ρ€Π°Π·ΡŠΠ΅ΠΌ USB для ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ ΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… устройств.

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΡƒΠ΅ΠΌ Arduino. ΠžΡΠ½ΠΎΠ²Ρ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ со скСтчами - _77.jpg

Рис. 11.4. ΠŸΠ»Π°Ρ‚Π° Freetronics USBDroid

ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с USBDroid ΠΈΠ»ΠΈ Π½Π΅ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ модСлями ΠΏΠ»Π°Ρ‚ хостов USB слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ USB_Host_Shield ΠΎΡ‚ [email protected] ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΏΠ»Π°Ρ‚ΠΎΠΉ слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ USB_Host_Shield_2, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰ΡƒΡŽ Π±ΠΎΠ»Π΅Π΅ ΡˆΠΈΡ€ΠΎΠΊΠΈΠΉ спСктр устройств.

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ интСрфСйса USB с ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ упомянутых Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ β€” Π½Π΅ самая простая Π·Π°Π΄Π°Ρ‡Π°. Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ ΠΊΡ€Π°ΠΉΠ½Π΅ Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹ΠΉ доступ ΠΊ шинС USB. На Π²Π΅Π±-сайтС Π°Π²Ρ‚ΠΎΡ€Π° (www.simonmonk.org) ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ скСтча sketch_11_03_host_keyboard, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ с использованиСм ΠΏΠ»Π°Ρ‚Ρ‹ хоста USB.

Π­Ρ‚ΠΎΡ‚ скСтч являСтся Π°Π΄Π°ΠΏΡ‚Π°Ρ†ΠΈΠ΅ΠΉ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ², ΡΠΎΠΏΡ€ΠΎΠ²ΠΎΠΆΠ΄Π°ΡŽΡ‰ΠΈΡ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ USB_Host_Shield. Π’ Π½Π΅ΠΌ, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»Π°, информация ΠΎ Π½Π°ΠΆΠ°Ρ‚Ρ‹Ρ… ΠΊΠ»Π°Π²ΠΈΡˆΠ°Ρ… выводится Π² ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΏΠΎΡ€Ρ‚Π° вмСсто ТидкокристалличСского дисплСя.

Π­Ρ‚ΠΎΡ‚ скСтч (ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ½ основан) ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ»ΡƒΠΆΠΈΡ‚ΡŒ ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΌ шаблоном для создания собствСнных скСтчСй, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ±Π° ΠΎΠ½ΠΈ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ наТатия всСх клавиш. Если вас ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΡƒΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ†ΠΈΡ„Ρ€ΠΎΠ²Ρ‹Π΅ клавиши ΠΈ клавиши управлСния курсором, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ сущСствСнно ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ свой скСтч.

Π‘ΠΊΠ΅Ρ‚Ρ‡ слишком Π΄Π»ΠΈΠ½Π½Ρ‹ΠΉ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ привСсти Π΅Π³ΠΎ здСсь Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ, поэтому я ΠΏΠΎΠΊΠ°ΠΆΡƒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½Ρ‹Π΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Π°ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ этот скСтч ΠΈ Π·Π°Π³Π»ΡΠ΄Ρ‹Π²Π°Ρ‚ΡŒ Π² Π½Π΅Π³ΠΎ, читая описаниС Π² ΠΊΠ½ΠΈΠ³Π΅.

Π‘ΠΊΠ΅Ρ‚Ρ‡ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ‚Ρ€ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ:

#include <Spi.h>

#include <Max3421e.h>

#include <Usb.h>

Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Spi.h Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ° для взаимодСйствий с ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ΠΎΠΌ хоста USB. Π’ Ρ€ΠΎΠ»ΠΈ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ микросхСма Max3421e, поэтому слСдуСт ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎΠΈΠΌΠ΅Π½Π½ΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ. И Π½Π°ΠΊΠΎΠ½Π΅Ρ†, Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π΅Ρ‰Π΅ ΠΎΠ΄Π½Ρƒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ (Usb.h), ΠΎΡΠ½ΠΎΠ²Π°Π½Π½ΡƒΡŽ Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ Max3421e.h, которая скрываСт Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ слоТности выполнСния ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ с ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ΠΎΠΌ.

Π—Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ импортирования Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ опрСдСлСния констант, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

#define BANGΒ Β Β Β Β Β Β Β (0x1E)

Π­Ρ‚ΠΎ просто Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ способ опрСдСлСния констант Π² C. Π”Π°Π½Π½ΡƒΡŽ константу ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΈΠ½Π°Ρ‡Π΅:

cons tint BANG = 0x1E;

Π”Π°Π»Π΅Π΅ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Ρ‚ΠΈΠΏΠΎΠ² MAX3421E ΠΈ USB, ΠΈ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ setup вызываСтся функция powerOn ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Max:

MAX3421E Max;

USB Usb;

Π’ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ loop Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Task ΠΎΠ±ΠΎΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Max ΠΈ Usb. Они ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‚ Π³ΠΎΡ‚ΠΎΠ²Π½ΠΎΡΡ‚ΡŒ интСрфСйса USB.

void loop() {

Β Β Β Β Max.Task();

Β Β Β Β Usb.Task();

Β Β Β Β if( Usb.getUsbTaskState() == USB_STATE_CONFIGURING ) {Β Β // ΠΆΠ΄Π°Ρ‚ΡŒ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ настройки

Β Β Β Β Β Β Β Β kbd_init();

Β Β Β Β Β Β Β Β Usb.setUsbTaskState( USB_STATE_RUNNING );

Β Β Β Β }

Β Β Β Β if( Usb.getUsbTaskState() == USB_STATE_RUNNING ) {Β Β // ΠΎΠΏΡ€ΠΎΡΠΈΡ‚ΡŒ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρƒ

Β Β Β Β Β Β Β Β kbd_poll();

Β Β Β Β }

}

ΠŸΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ запускС интСрфСйс 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, ΠΈ вмСсто скан-ΠΊΠΎΠ΄ΠΎΠ²

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΡƒΠ΅ΠΌ Arduino. ΠžΡΠ½ΠΎΠ²Ρ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ со скСтчами - _78.jpg

Рис. 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()

{