ΠΠ»Π°ΡΠ° Ρ ΠΎΡΡΠ° USB ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°
ΠΠ»Π°ΡΠ° Ρ ΠΎΡΡΠ° USB ΠΈ ΡΠΎΠΏΡΡΡΡΠ²ΡΡΡΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΡΠΎΠ·Π΄Π°Π½Ρ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ Π΄Π°Π²Π½ΠΎ ΠΈ Π² Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΡΠΈΡΠΎΠΊΠΈΠΉ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ ΠΏΠ΅ΡΠΈΡΠ΅ΡΠΈΠΉΠ½ΡΡ ΡΡΡΡΠΎΠΉΡΡΠ². ΠΠ΅ΡΠ²Π°Ρ ΠΏΠ»Π°ΡΠ° Ρ ΠΎΡΡΠ° USB Π±ΡΠ»Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½Π° Π² [email protected] (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
ΠΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ 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, ΠΈ Π²ΠΌΠ΅ΡΡΠΎ ΡΠΊΠ°Π½-ΠΊΠΎΠ΄ΠΎΠ²

Π ΠΈΡ. 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()
{