Arduino学习笔记A11 – Arduino模拟电脑键盘(基于AVR-USB的USB-HID设备) [转]

Arduino模拟电脑键盘(基于AVR-USB的USB-HID设备) 关于此帖子的其他讨论,还可以看看 http://geek-workshop.com/thread-2303-1-1.html http://geek-workshop.com/thread-2310-1-1.html 键盘作为经典的输入设备,使用在很多互动中都有特别的优势,比如我们可以通过键盘直接给flash传递按键事件。而无需通过串口之类的特殊接口,虽然我们可以拆一个传统的键盘,然后将里面的按键引出来,但是这样有一个缺点,就是键值不能动态改变并且不能一次多键。使用模拟键盘的话,我们就可以随意在程序设置按键的时间和键值。比如本文的例子就是按下一个按键,模拟键盘就在电脑输入“HELLO WORLD”。 硬件部分: 材料清单: Arduino x1 68Ω电阻 x2 (没有68Ω的话,用50~100Ω电阻也行) 2.2kΩ电阻 x1 (没有2.2kΩ的话,用1.5k~2.2k电阻也行) USB连接线(一端是USB口,另一端是电线) x1 3.6v 稳压管(建议选用功耗0.25~0.5w的)x2 电路原理图: 电路图解说: 1、两个68Ω的电阻起到限流和保护作用,防止在意外情况下损坏计算机的USB端口或单片机的端口。 2、2.2kΩ电阻是上拉电阻,用于分辨总线状态。如果上拉电阻接于D+和+5v端则是高速USB设备,接于D-与+5v端,则是低速设备。此处键盘传输速率不高,接到D-作为低速设备即可。 3、D+和D-上的3.6V稳压二极管D1和D2起到限制数据线上的电平的作用。因为在USB规范中规定数据线D+和D-上的电平范围是3.0V至3.6V,而AVR单片机的输出电平是Vcc。如果单片机的Vcc是5V,在没有D1和D2的情况下将造成电平不匹配,会造成在很多计算机中无法正确识别出USB设备。如果用户系统的Vcc在3.0V至3.6V之间,就可以省略这两个稳压二极管。从这里也可以看出用户系统的Vcc必须高于3V。 4、由于低速AVRUSB所需要的是1.5MHz时钟,而单片机每8条指令就能精确完成一个数据位的采集。所以AVRUSB最小单片机时钟频率是12MHz。并且可以使用的时钟频率有12MHz、12.8MHz、15MHz、16MHz、16.5MHz、20MHz,其他的不支持。所以如果使用最小系统制作此模拟键盘的话8MHz的话,ATMega8L不能用。 ———————— 软件部分: Arduino支持库文件: http://soft1.wmzhe.com/download/ … ino/UsbKeyboard.zip UsbKeyboard.zip (112.45 KB, 下载次数: 1421) 文件下载后解压到arduino编译器的libraries文件夹下面。 注意: 1、UsbKeyboard库中,usbconfig.h里面可以更改USB接线的引脚定义,下面给出一个大概解释(下面的PORTD是指AVR单片机的PORTD,要查询Arduino原理图才能得到是Arduino的哪个引脚): #define USB_CFG_IOPORTNAME D USB输入输出引脚使用AVR单片机的PORTD,如果改成B就是使用PORTB #define USB_CFG_DMINUS_BIT 4 USB的D-接PORTD的第四位PD4,对应Arduino D4 #define USB_CFG_DPLUS_BIT  2 USB的D+接PORTD的第二位PD2,对应Arduino D2 #define USB_CFG_PULLUP_IOPORTNAME… Continue reading Arduino学习笔记A11 – Arduino模拟电脑键盘(基于AVR-USB的USB-HID设备) [转]

Arduino读取键盘[转载]

Arduino读取键盘 这里提供两种方式从Arduino读取键盘。第一种方式是使用矩阵式(Matrix)键盘,另一种方式是使用PS2键盘。 矩阵键盘(Matrix keypad) 首先必须安装Arduino Keypad键盘库(Keypad library),Arduino Keypad键盘库可以从Arduino Playground下载。Arduino Keypad键盘库让你读取矩阵式键盘而不用编写复杂的代码,此键盘库可以读取3×4, 4×4以及各种矩阵结构的键盘。 使用Arduino Keypad键盘库注意事项 该键盘库是属于无阻塞式,按下谋键不放,其余(接下来)的代码还是会继续运行 如果编写控制键盘处运用到delay(),这将造成键盘反应迟顿 按下谋键,getKey()只返回一个键值,而不是自动重复。松开按键时,可以追踪其RELEASED event 安装Arduino Keypad键盘库 下载Arduino Keypad键盘库 将下载了的文件(keypad.zip)解压至Arduino软件的libraries文件夹,如图 打开Arduino软件 选择File>Examples>Keypad,将会看见以下画面,表示Arduino Keypad键盘库安装成功 4×4矩阵keypad示范 根据下面接线连接键盘至Arduino Arduino 4×4 Keypad D2 1 D3 2 D4 3 D5 4 D6 5 D7 6 D8 7 D9 8 上载以下代码至Arduino #include <Keypad.h> const byte ROWS = 4; //… Continue reading Arduino读取键盘[转载]

arduino 使用多个SPI设备 how to running multiple SPI device on arduino

how to running PN532 and W5100 on same board 最近研究arduino开发板,尝试将NFC板(PN532)和网络扩展板(w5100)组合在一起,碰到个问题,这两块板子都是通过SPI总线和arduino通信,同时占用pin10,11,12,13三个口,其中10是片选信号SS。这两个设备始终无法同时工作,出现很多莫名其妙的问题。 比如我编译IDE自带的webserver程序,设置了ip地址为192.168.1.15,启动以后,ping 192.168.1.15可以通,但在串口接收到 ip地址为192.139.1.15,甚至是192.192.192.192,或者其他乱七八糟的地址。在PC上访问http://192.168.1.15无法打开。拔除NFC扩展板,web访问正常。然后开始漫长google之路。 参考链接 http://arduino.cc/en/Main/ArduinoEthernetShield 1.首先确认两个设备不能使用同一个SS pin,将nfc的nss针插到其他pin(貌似1,2,4,不能使用,4是SD卡的片选),我选择5,然后在arduino的setup里面增加 pinMode(5,OUTPUT); digitalWrite(5,HIGH); 测试同时连接NFC和网络,只初始化网卡,webserver正常;如果同时初始化网卡和NFC,依旧无法访问webserver 参考链接 http://www.circuitsathome.com/mcu/running-multiple-slave-devices-on-arduino-spi-bus 2.继续google,发现两个设备的setBitOrder似乎不同,PN532是LSBFIRST,而网络是WSBFIRST, 找到原因后就简单了,只需要启动不同设备的时候,不仅仅设置SS,还要重新设置SPI的参数。 找到PN532.cpp的begin(),大约在43行,将 pn532_SPI.setDataMode(SPI_MODE0); pn532_SPI.setBitOrder(LSBFIRST); /*Set the SPI frequency to be one sixteenth of the frequency of the system clock*/ pn532_SPI.setClockDivider(SPI_CLOCK_DIV16); 注释掉,然后在自己的程序里面分别写上 void enablePN() { digitalWrite(ETH_SS, HIGH); digitalWrite(NFC_SS, LOW); SPI.setDataMode(SPI_MODE0); SPI.setBitOrder(LSBFIRST); SPI.setClockDivider(SPI_CLOCK_DIV16); delay(10);… Continue reading arduino 使用多个SPI设备 how to running multiple SPI device on arduino