久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 11025|回復(fù): 5
打印 上一主題 下一主題
收起左側(cè)

Arduino學(xué)習(xí)11-Arduino模擬電腦鍵盤(基于AVR-USB的USB-HID設(shè)備)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
鍵盤作為經(jīng)典的輸入設(shè)備,使用在很多互動(dòng)中都有特別的優(yōu)勢(shì),比如我們可以通過鍵盤直接給flash傳遞按鍵事件。而無需通過串口之類的特殊接口,雖然我們可以拆一個(gè)傳統(tǒng)的鍵盤,然后將里面的按鍵引出來,但是這樣有一個(gè)缺點(diǎn),就是鍵值不能動(dòng)態(tài)改變并且不能一次多鍵。使用模擬鍵盤的話,我們就可以隨意在程序設(shè)置按鍵的時(shí)間和鍵值。比如本文的例子就是按下一個(gè)按鍵,模擬鍵盤就在電腦輸入“HELLO WORLD”。

硬件部分:
材料清單:
Arduino x1
68Ω電阻 x2 (沒有68Ω的話,用50~100Ω電阻也行)
2.2kΩ電阻 x1 (沒有2.2kΩ的話,用1.5k~2.2k電阻也行)
USB連接線(一端是USB口,另一端是電線) x1
3.6v 穩(wěn)壓管(建議選用功耗0.25~0.5w的)x2


電路原理圖:

電路圖解說:
1、兩個(gè)68Ω的電阻起到限流和保護(hù)作用,防止在意外情況下?lián)p壞計(jì)算機(jī)的USB端口或單片機(jī)的端口。
2、2.2kΩ電阻是上拉電阻,用于分辨總線狀態(tài)。如果上拉電阻接于D+和+5v端則是高速USB設(shè)備,接于D-與+5v端,則是低速設(shè)備。此處鍵盤傳輸速率不高,接到D-作為低速設(shè)備即可。
3、D+和D-上的3.6V穩(wěn)壓二極管D1和D2起到限制數(shù)據(jù)線上的電平的作用。因?yàn)樵赨SB規(guī)范中規(guī)定數(shù)據(jù)線D+和D-上的電平范圍是3.0V至3.6V,而AVR單片機(jī)的輸出電平是Vcc。如果單片機(jī)的Vcc是5V,在沒有D1和D2的情況下將造成電平不匹配,會(huì)造成在很多計(jì)算機(jī)中無法正確識(shí)別出USB設(shè)備。如果用戶系統(tǒng)的Vcc在3.0V至3.6V之間,就可以省略這兩個(gè)穩(wěn)壓二極管。從這里也可以看出用戶系統(tǒng)的Vcc必須高于3V。
4、由于低速AVRUSB所需要的是1.5MHz時(shí)鐘,而單片機(jī)每8條指令就能精確完成一個(gè)數(shù)據(jù)位的采集。所以AVRUSB最小單片機(jī)時(shí)鐘頻率是12MHz。并且可以使用的時(shí)鐘頻率有12MHz、12.8MHz、15MHz、16MHz、16.5MHz、20MHz,其他的不支持。所以如果使用最小系統(tǒng)制作此模擬鍵盤的話8MHz的話,ATMega8L不能用。
————————
軟件部分:

Arduino支持庫文件:
UsbKeyboard.zip (112.45 KB, 下載次數(shù): 52)
文件下載后解壓到arduino編譯器的libraries文件夾下面。
注意:

1、UsbKeyboard庫中,usbconfig.h里面可以更改USB接線的引腳定義,下面給出一個(gè)大概解釋(下面的PORTD是指AVR單片機(jī)的PORTD,要查詢Arduino原理圖: Arduino_Uno_Rev3-schematic.pdf (81.39 KB, 下載次數(shù): 15) 才能得到是Arduino的哪個(gè)引腳):

#define USB_CFG_IOPORTNAME D
USB輸入輸出引腳使用AVR單片機(jī)的PORTD,如果改成B就是使用PORTB
#define USB_CFG_DMINUS_BIT 4
USB的D-接PORTD的第四位PD4,對(duì)應(yīng)Arduino D4
#define USB_CFG_DPLUS_BIT  2
USB的D+接PORTD的第二位PD2,對(duì)應(yīng)Arduino D2
#define USB_CFG_PULLUP_IOPORTNAME D
USB上拉引腳使用AVR單片機(jī)的PORTD,如果改成B就是使用PORTB
#define USB_CFG_PULLUP_BIT  5
USB的上拉電阻接PORTD的第五位PD5,對(duì)應(yīng)Arduino  D5


2、在UsbKeyboard庫的UsbKeyboard.h里面,有關(guān)于模擬鍵值的表
#define KEY_A       4
#define KEY_B       5
#define KEY_C       6
#define KEY_D       7
#define KEY_E       8
等。但不齊全。經(jīng)過測(cè)試,其實(shí)這個(gè)鍵盤基本可以模擬幾乎所有鍵值(Power,Sleep,Pause似乎不能)。
比如方向鍵右左下上分別對(duì)應(yīng)79,80,81,82數(shù)字。即寫成
UsbKeyboard.sendKeyStroke(79);
UsbKeyboard.sendKeyStroke(81);
等。由于整理比較麻煩,大家可以自己下載個(gè)KeyboardTest軟件測(cè)試不同數(shù)字下面的鍵值。

程序示例:
下面的例子演示了用Arduino虛擬鍵盤的應(yīng)用例子。打開記事本,然后將Arduino的D12引腳和GND連起來,就會(huì)打印HELLO WORLD字樣。
  1.     /*
  2.     Arduino模擬鍵盤 by Ansifa
  3.     2012.6.8
  4.      
  5.     功能描述:插上此模擬鍵盤,打開記事本,然后按下按鈕,即可在記事本打印出HELLO WORLD字樣
  6.      
  7.     接線方法:
  8.     Arduino D2接68Ω電阻后,接USB線D+
  9.     Arduino D4接68Ω電阻后,接USB線D-
  10.     Arduino D5接2.2kΩ電阻后,接USB線D-
  11.     Arduino D2接3.6v穩(wěn)壓管到GND
  12.     Arduino D4接3.6v穩(wěn)壓管到GND
  13.     +5v接USB線VCC
  14.     GND接USB線GND
  15.     Arduino D1接一個(gè)開關(guān)到GND
  16.      
  17.     附:USB線序顏色(由于各生產(chǎn)廠不同,不一定準(zhǔn)確,僅供參考)
  18.     *USB鍵鼠:      |        *USB接口
  19.     白<->VCC        |        紅<->VCC
  20.     橙<->D-         |        白<->D-
  21.     綠<->D+         |        綠<->D+
  22.     藍(lán)<->GND        |        黑<->GND
  23.      
  24.     */
  25.      
  26.     #include "UsbKeyboard.h"
  27.     int KEYPIN = 1;                //按鍵接在D1引腳,也可以改成任何引腳
  28.     void setup()
  29.     {
  30.       TIMSK0 &= !(1 << TOIE0);        //
  31.       pinMode(KEYPIN, INPUT);
  32.       digitalWrite(KEYPIN, HIGH);
  33.     }
  34.     void loop()
  35.     {
  36.       UsbKeyboard.update();
  37.       if(digitalRead(KEYPIN) == HIGH)
  38.       {
  39.         delay(100);
  40.         if(digitalRead(KEYPIN) == LOW)
  41.         {
  42.           UsbKeyboard.sendKeyStroke(KEY_H);
  43.           UsbKeyboard.sendKeyStroke(KEY_E);
  44.           UsbKeyboard.sendKeyStroke(KEY_L);
  45.           UsbKeyboard.sendKeyStroke(KEY_L);
  46.           UsbKeyboard.sendKeyStroke(KEY_O);
  47.           UsbKeyboard.sendKeyStroke(KEY_SPACE);
  48.           UsbKeyboard.sendKeyStroke(KEY_W);
  49.           UsbKeyboard.sendKeyStroke(KEY_O);
  50.           UsbKeyboard.sendKeyStroke(KEY_R);
  51.           UsbKeyboard.sendKeyStroke(KEY_L);
  52.           UsbKeyboard.sendKeyStroke(KEY_D);
  53.           UsbKeyboard.sendKeyStroke(KEY_ENTER);
  54.         }
  55.       }
  56.     }
復(fù)制代碼

注意,先插上Arduino數(shù)據(jù)線,將程序?qū)懭階rduino。然后拔掉數(shù)據(jù)線,將模擬鍵盤USB線接到電腦,即可使用。

下面隨便點(diǎn)實(shí)物圖

剛焊好的正反面


插數(shù)據(jù)線寫程序進(jìn)Arduino:




分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:114115 發(fā)表于 2016-4-18 01:18 | 只看該作者
開始
此時(shí)正好手頭沒事,而且所需的硬件都有,所以果斷擺上東西,按照帖子的說明一步步鏈接好電路,下好程序,插上USB線。
“無法識(shí)別的USB設(shè)備”
懷疑
首先,覺得是自己的接線方法有問題,所以把所有器件都拆下來從新連接上,結(jié)構(gòu)依舊無法識(shí)別。看了下跟帖,也有些人說無法識(shí)別,但也沒有提出解決方案。
其次,是不是帖子貼出來的代碼有問題呢?遍在網(wǎng)上搜了好多發(fā)布的arduino的USB庫和代碼,有的編譯不通,有的編譯成功,但是下載下去之后依舊無法識(shí)別。

再次,懷疑是穩(wěn)壓管的型號(hào)不對(duì),因?yàn)橛玫姆(wěn)壓管是在桌子上小垃圾堆里照出來的,不知道具體型號(hào)。用萬用表量了一下USB信號(hào)線的電壓,4+V,果然超了……原貼上建議的是3+V,這下完蛋了,看來這個(gè)鼠標(biāo)我是做不成了。
休息干點(diǎn)別的吧,反正手頭也沒有適合的穩(wěn)壓二極管。突然靈光一現(xiàn):這個(gè)穩(wěn)壓管是坐什么用的呢?可能一:作為USB信號(hào)線,對(duì)靜電比較敏感,所以用穩(wěn)壓管來釋放經(jīng)靜電,放置靜電打壞器件。如果是這樣,那就會(huì)有如下兩個(gè)疑問:1、如果作保護(hù)器件的話,去掉這個(gè)器件也不會(huì)影響系統(tǒng)工作,2、如果是保護(hù)器件為什么一定要用3+V的穩(wěn)壓管呢,我的是4+V的應(yīng)該也沒有問題啊。顯然不是起保護(hù)作用。 可能二:作為USB信號(hào)線的阻抗匹配即濾波。因?yàn)槎䴓O管的PN結(jié)寬度會(huì)隨兩端點(diǎn)啊的變化而變化,所以二極管是帶有電容性的,如果這樣也會(huì)有疑問,1、如上可能性疑問二,既然3+V二極管可以那么4+V的二極管也可以。2,濾波USB低速通信時(shí)影響不大。所以也不是其這個(gè)作用。最后的可能,因?yàn)槭褂?V的arduino,所以穩(wěn)壓管的作用就是限制USB數(shù)據(jù)線的電壓,這個(gè)倒是說得通,3+V二極管可以,4+V的二極管也不可以。俗話說要?jiǎng)幽X也要?jiǎng)邮郑晕一鹚俨榱艘幌耈SB標(biāo)準(zhǔn)的文檔


,證明,穩(wěn)壓管的作用就是把USB信號(hào)線的電壓限制在2.8-3.6。這樣既然知道了穩(wěn)壓管的作用就好辦了,雖然手頭沒有沒有穩(wěn)壓管,但是把信號(hào)線的電壓先知道這個(gè)范圍內(nèi),方法也很簡單。我讓arduino運(yùn)行在3.3V這個(gè)問題就解決了。因?yàn)槲矣玫氖莂rduino pro mini,

他是電源可外接的,恰好手頭的FTDI也有3。3V輸出,

拿來借用一下,OK這個(gè)問題解決。USB在此插在電腦上試了一下,發(fā)現(xiàn)還是不行,哭了!
最后,發(fā)現(xiàn)所給的電路圖中USB信號(hào)定義順序有問題,記憶總USB數(shù)據(jù)線順序是VUSB,D-,D+,GND。而原貼中的順序VUSB,D+,D-,GND。神奇了!還是再看看USB標(biāo)準(zhǔn)吧

也就是說原帖子上拉電阻拉到D-是沒錯(cuò)的,但是因?yàn)镈-D+的順序顛倒了,所以大多數(shù)人都會(huì)把上拉電阻拉到D+。當(dāng)然我也接錯(cuò)了,之后調(diào)了一下上拉的位置,模擬的鼠標(biāo)就被識(shí)別了。
總之,原帖USB接口線序有問題會(huì)誤導(dǎo)大家接線,所以大家的會(huì)出現(xiàn)無法識(shí)別的問題。貼出來的程序沒問題
另外,傳統(tǒng)不帶USB的AVR能夠?qū)崿F(xiàn)USB功能,雖然是很常見的事,但是在Arduino在國內(nèi)還是比較少見的。對(duì)于比較專業(yè)的Arduino也比較建議使用pro mini這樣的精簡硬件版本,好處有三,第一引出端口超多,方便自己使用。第二體積小,便于潛入各種作品當(dāng)中,第三價(jià)價(jià)格低。

第二季主要分析用普通arduino普通IO口模擬USB所需電路的硬件分析
先貼張圖:

上圖是5V系統(tǒng)的IO口仿真USB所需的硬件電路。
其實(shí)這個(gè)電路對(duì)大家來說并不陌生,大家手頭的USBasp一般都是采用這個(gè)電路,應(yīng)為這種下載器也是采用沒喲USB接口的AVR來設(shè)計(jì)的。
先說下2.2k電阻的作用。第一季已經(jīng)提到過了,USB標(biāo)準(zhǔn)中,低速設(shè)備的D-信號(hào)線要有1.5k電阻上拉到電源,這里就不在上圖了。因?yàn)檫@個(gè)是5V系統(tǒng),所以使用電阻要比標(biāo)準(zhǔn)電阻大一些。
只有是穩(wěn)壓二極管。也就是傳說中的齊納二極管,學(xué)過模電的同學(xué)肯定知道(二極管的方向擊穿有兩種,一種是雪崩擊穿,一種是齊納擊穿。書里大概是這么說的。)穩(wěn)壓二極管的工作原理就是當(dāng)反向電壓達(dá)到一定值時(shí),他便會(huì)被反向擊穿,通過這種方式來穩(wěn)定電壓。這種擊穿當(dāng)電壓降低之后二極管可以恢復(fù)到正常狀態(tài),幾乎不會(huì)對(duì)二極管有損壞。不說廢話了,這個(gè)二極管的作用就是將數(shù)據(jù)線電壓有5V等級(jí),穩(wěn)定到3V左右等級(jí)。
最后呢,說下串聯(lián)在信號(hào)線68歐姆的電阻。這個(gè)電阻的作用大家可以探討一下,我這里只是說下自己理解的主要作用。首先呢,還是來看標(biāo)準(zhǔn),

標(biāo)準(zhǔn)上的意思就是USB信號(hào)的單端等效阻抗是28-44歐,所以這個(gè)68的電阻其這個(gè)作用。第二,這作用個(gè)人覺得重要與第一個(gè)。當(dāng)信號(hào)被arduino拉到高時(shí),穩(wěn)壓二極管便會(huì)被擊穿。假設(shè)沒有這個(gè)電阻,因?yàn)閍rduino的IO引腳與穩(wěn)壓管之間沒有壓降(因?yàn)闆]有電阻)所以穩(wěn)壓二極管就要漏下很多電流,知道吧IO口電壓拉低至穩(wěn)壓電壓。在這種情況下可以認(rèn)為是IO重負(fù)載,所以輸出電流接近AVR的IO的最大驅(qū)動(dòng)電流40mA,這樣會(huì)極大損害IO結(jié)構(gòu),無辜功耗增加,再個(gè)就是需要選一個(gè)功率稍大的穩(wěn)壓二極管,這種情況下也會(huì)增加不穩(wěn)定性,有了這兩個(gè)電阻便會(huì)避免以上問題。這樣看這個(gè)電阻可以看做是限流電阻了

在3.3V系統(tǒng)中
2.2K的電阻,當(dāng)然可以按照標(biāo)準(zhǔn)改為1.5k
再個(gè)限流電阻可以去掉了
另外68歐姆的電阻,也有可以去掉的可能……沒試過,稍后去掉看下上來匯報(bào)
回復(fù)

使用道具 舉報(bào)

板凳
ID:618619 發(fā)表于 2019-10-4 18:53 | 只看該作者
t樓主,提示如下錯(cuò)誤信息。為何。
Arduino:1.8.9 (Windows 7), 開發(fā)板:"Arduino/Genuino Uno"

D:\Program Files (x86)\Arduino\arduino-builder -dump-prefs -logger=machine -hardware D:\Program Files (x86)\Arduino\hardware -tools D:\Program Files (x86)\Arduino\tools-builder -tools D:\Program Files (x86)\Arduino\hardware\tools\avr -built-in-libraries D:\Program Files (x86)\Arduino\libraries -libraries D:\UserData\Personal\Arduino\libraries -fqbn=arduino:avr:uno -vid-pid=1A86_7523 -ide-version=10809 -build-path C:\Users\ADMINI~1\AppData\Local\Temp\arduino_build_792218 -warnings=default -build-cache C:\Users\ADMINI~1\AppData\Local\Temp\arduino_cache_518244 -prefs=build.warn_data_percentage=75 -prefs=runtime.tools.arduinoOTA.path=D:\Program Files (x86)\Arduino\hardware\tools\avr -prefs=runtime.tools.arduinoOTA-1.2.1.path=D:\Program Files (x86)\Arduino\hardware\tools\avr -prefs=runtime.tools.avr-gcc.path=D:\Program Files (x86)\Arduino\hardware\tools\avr -prefs=runtime.tools.avr-gcc-5.4.0-atmel3.6.1-arduino2.path=D:\Program Files (x86)\Arduino\hardware\tools\avr -prefs=runtime.tools.avrdude.path=D:\Program Files (x86)\Arduino\hardware\tools\avr -prefs=runtime.tools.avrdude-6.3.0-arduino14.path=D:\Program Files (x86)\Arduino\hardware\tools\avr -verbose D:\UserData\Personal\Arduino\sketch_oct04a\sketch_oct04a.ino
D:\Program Files (x86)\Arduino\arduino-builder -compile -logger=machine -hardware D:\Program Files (x86)\Arduino\hardware -tools D:\Program Files (x86)\Arduino\tools-builder -tools D:\Program Files (x86)\Arduino\hardware\tools\avr -built-in-libraries D:\Program Files (x86)\Arduino\libraries -libraries D:\UserData\Personal\Arduino\libraries -fqbn=arduino:avr:uno -vid-pid=1A86_7523 -ide-version=10809 -build-path C:\Users\ADMINI~1\AppData\Local\Temp\arduino_build_792218 -warnings=default -build-cache C:\Users\ADMINI~1\AppData\Local\Temp\arduino_cache_518244 -prefs=build.warn_data_percentage=75 -prefs=runtime.tools.arduinoOTA.path=D:\Program Files (x86)\Arduino\hardware\tools\avr -prefs=runtime.tools.arduinoOTA-1.2.1.path=D:\Program Files (x86)\Arduino\hardware\tools\avr -prefs=runtime.tools.avr-gcc.path=D:\Program Files (x86)\Arduino\hardware\tools\avr -prefs=runtime.tools.avr-gcc-5.4.0-atmel3.6.1-arduino2.path=D:\Program Files (x86)\Arduino\hardware\tools\avr -prefs=runtime.tools.avrdude.path=D:\Program Files (x86)\Arduino\hardware\tools\avr -prefs=runtime.tools.avrdude-6.3.0-arduino14.path=D:\Program Files (x86)\Arduino\hardware\tools\avr -verbose D:\UserData\Personal\Arduino\sketch_oct04a\sketch_oct04a.ino
Using board 'uno' from platform in folder: D:\Program Files (x86)\Arduino\hardware\arduino\avr
Using core 'arduino' from platform in folder: D:\Program Files (x86)\Arduino\hardware\arduino\avr
Detecting libraries used...
"D:\\Program Files (x86)\\Arduino\\hardware\\tools\\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10809 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR "-ID:\\Program Files (x86)\\Arduino\\hardware\\arduino\\avr\\cores\\arduino" "-ID:\\Program Files (x86)\\Arduino\\hardware\\arduino\\avr\\variants\\standard" "C:\\Users\\ADMINI~1\\AppData\\Local\\Temp\\arduino_build_792218\\sketch\\sketch_oct04a.ino.cpp" -o nul
"D:\\Program Files (x86)\\Arduino\\hardware\\tools\\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10809 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR "-ID:\\Program Files (x86)\\Arduino\\hardware\\arduino\\avr\\cores\\arduino" "-ID:\\Program Files (x86)\\Arduino\\hardware\\arduino\\avr\\variants\\standard" "-ID:\\UserData\\Personal\\Arduino\\libraries\\UsbKeyboard" "C:\\Users\\ADMINI~1\\AppData\\Local\\Temp\\arduino_build_792218\\sketch\\sketch_oct04a.ino.cpp" -o nul
"D:\\Program Files (x86)\\Arduino\\hardware\\tools\\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10809 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR "-ID:\\Program Files (x86)\\Arduino\\hardware\\arduino\\avr\\cores\\arduino" "-ID:\\Program Files (x86)\\Arduino\\hardware\\arduino\\avr\\variants\\standard" "-ID:\\UserData\\Personal\\Arduino\\libraries\\UsbKeyboard" "D:\\UserData\\Personal\\Arduino\\libraries\\UsbKeyboard\\oddebug.c" -o nul
"D:\\Program Files (x86)\\Arduino\\hardware\\tools\\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10809 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR "-ID:\\Program Files (x86)\\Arduino\\hardware\\arduino\\avr\\cores\\arduino" "-ID:\\Program Files (x86)\\Arduino\\hardware\\arduino\\avr\\variants\\standard" "-ID:\\UserData\\Personal\\Arduino\\libraries\\UsbKeyboard" "D:\\UserData\\Personal\\Arduino\\libraries\\UsbKeyboard\\usbdrv.c" -o nul
"D:\\Program Files (x86)\\Arduino\\hardware\\tools\\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10809 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR "-ID:\\Program Files (x86)\\Arduino\\hardware\\arduino\\avr\\cores\\arduino" "-ID:\\Program Files (x86)\\Arduino\\hardware\\arduino\\avr\\variants\\standard" "-ID:\\UserData\\Personal\\Arduino\\libraries\\UsbKeyboard" "D:\\UserData\\Personal\\Arduino\\libraries\\UsbKeyboard\\usbdrvasm.S" -o nul
Error while detecting libraries included by D:\UserData\Personal\Arduino\libraries\UsbKeyboard\usbdrvasm.S
Generating function prototypes...
"D:\\Program Files (x86)\\Arduino\\hardware\\tools\\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10809 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR "-ID:\\Program Files (x86)\\Arduino\\hardware\\arduino\\avr\\cores\\arduino" "-ID:\\Program Files (x86)\\Arduino\\hardware\\arduino\\avr\\variants\\standard" "-ID:\\UserData\\Personal\\Arduino\\libraries\\UsbKeyboard" "C:\\Users\\ADMINI~1\\AppData\\Local\\Temp\\arduino_build_792218\\sketch\\sketch_oct04a.ino.cpp" -o "C:\\Users\\ADMINI~1\\AppData\\Local\\Temp\\arduino_build_792218\\preproc\\ctags_target_for_gcc_minus_e.cpp"
"D:\\Program Files (x86)\\Arduino\\tools-builder\\ctags\\5.8-arduino11/ctags" -u --language-force=c++ -f - --c++-kinds=svpf --fields=KSTtzns --line-directives "C:\\Users\\ADMINI~1\\AppData\\Local\\Temp\\arduino_build_792218\\preproc\\ctags_target_for_gcc_minus_e.cpp"
正在編譯項(xiàng)目...
"D:\\Program Files (x86)\\Arduino\\hardware\\tools\\avr/bin/avr-g++" -c -g -Os -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -MMD -flto -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10809 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR "-ID:\\Program Files (x86)\\Arduino\\hardware\\arduino\\avr\\cores\\arduino" "-ID:\\Program Files (x86)\\Arduino\\hardware\\arduino\\avr\\variants\\standard" "-ID:\\UserData\\Personal\\Arduino\\libraries\\UsbKeyboard" "C:\\Users\\ADMINI~1\\AppData\\Local\\Temp\\arduino_build_792218\\sketch\\sketch_oct04a.ino.cpp" -o "C:\\Users\\ADMINI~1\\AppData\\Local\\Temp\\arduino_build_792218\\sketch\\sketch_oct04a.ino.cpp.o"
In file included from D:\UserData\Personal\Arduino\libraries\UsbKeyboard/UsbKeyboard.h:13:0,

                 from D:\UserData\Personal\Arduino\sketch_oct04a\sketch_oct04a.ino:26:

D:\UserData\Personal\Arduino\libraries\UsbKeyboard/usbdrv.h:479:26: error: variable 'usbDescriptorDevice' must be const in order to be put into read-only section by means of '__attribute__((progmem))'

char usbDescriptorDevice[];

                          ^

D:\UserData\Personal\Arduino\libraries\UsbKeyboard/usbdrv.h:485:33: error: variable 'usbDescriptorConfiguration' must be const in order to be put into read-only section by means of '__attribute__((progmem))'

char usbDescriptorConfiguration[];

                                 ^

D:\UserData\Personal\Arduino\libraries\UsbKeyboard/usbdrv.h:491:29: error: variable 'usbDescriptorHidReport' must be const in order to be put into read-only section by means of '__attribute__((progmem))'

char usbDescriptorHidReport[];

                             ^

D:\UserData\Personal\Arduino\libraries\UsbKeyboard/usbdrv.h:497:27: error: variable 'usbDescriptorString0' must be const in order to be put into read-only section by means of '__attribute__((progmem))'

char usbDescriptorString0[];

                           ^

D:\UserData\Personal\Arduino\libraries\UsbKeyboard/usbdrv.h:503:31: error: variable 'usbDescriptorStringVendor' must be const in order to be put into read-only section by means of '__attribute__((progmem))'

int usbDescriptorStringVendor[];

                               ^

D:\UserData\Personal\Arduino\libraries\UsbKeyboard/usbdrv.h:509:31: error: variable 'usbDescriptorStringDevice' must be const in order to be put into read-only section by means of '__attribute__((progmem))'

int usbDescriptorStringDevice[];

                               ^

D:\UserData\Personal\Arduino\libraries\UsbKeyboard/usbdrv.h:515:37: error: variable 'usbDescriptorStringSerialNumber' must be const in order to be put into read-only section by means of '__attribute__((progmem))'

int usbDescriptorStringSerialNumber[];

                                     ^

In file included from D:\UserData\Personal\Arduino\sketch_oct04a\sketch_oct04a.ino:26:0:

D:\UserData\Personal\Arduino\libraries\UsbKeyboard/UsbKeyboard.h:36:39: error: variable 'usbDescriptorHidReport' must be const in order to be put into read-only section by means of '__attribute__((progmem))'

PROGMEM char usbHidReportDescriptor[35] = { /* USB report descriptor */

                                       ^

D:\UserData\Personal\Arduino\libraries\UsbKeyboard/UsbKeyboard.h:55:1: warning: narrowing conversion of '161' from 'int' to 'char' inside { } [-Wnarrowing]

};

^

D:\UserData\Personal\Arduino\libraries\UsbKeyboard/UsbKeyboard.h:55:1: warning: narrowing conversion of '224' from 'int' to 'char' inside { } [-Wnarrowing]

D:\UserData\Personal\Arduino\libraries\UsbKeyboard/UsbKeyboard.h:55:1: warning: narrowing conversion of '231' from 'int' to 'char' inside { } [-Wnarrowing]

D:\UserData\Personal\Arduino\libraries\UsbKeyboard/UsbKeyboard.h:55:1: warning: narrowing conversion of '149' from 'int' to 'char' inside { } [-Wnarrowing]

D:\UserData\Personal\Arduino\libraries\UsbKeyboard/UsbKeyboard.h:55:1: warning: narrowing conversion of '129' from 'int' to 'char' inside { } [-Wnarrowing]

D:\UserData\Personal\Arduino\libraries\UsbKeyboard/UsbKeyboard.h:55:1: warning: narrowing conversion of '149' from 'int' to 'char' inside { } [-Wnarrowing]

D:\UserData\Personal\Arduino\libraries\UsbKeyboard/UsbKeyboard.h:55:1: warning: narrowing conversion of '129' from 'int' to 'char' inside { } [-Wnarrowing]

D:\UserData\Personal\Arduino\libraries\UsbKeyboard/UsbKeyboard.h:55:1: warning: narrowing conversion of '192' from 'int' to 'char' inside { } [-Wnarrowing]

使用庫 UsbKeyboard 在文件夾: D:\UserData\Personal\Arduino\libraries\UsbKeyboard (legacy)
exit status 1
為開發(fā)板 Arduino/Genuino Uno 編譯時(shí)出錯(cuò)。
回復(fù)

使用道具 舉報(bào)

地板
ID:618619 發(fā)表于 2019-10-6 17:16 | 只看該作者
后來換了一個(gè)版本的ide好了
回復(fù)

使用道具 舉報(bào)

5#
ID:891140 發(fā)表于 2021-8-4 18:20 | 只看該作者
請(qǐng)問,USB鍵盤按鍵信息都是布爾數(shù)據(jù),如果想做一個(gè)外設(shè)將0-100%的模擬量輸入電腦,該怎么處理呢?USB鍵盤和鼠標(biāo)功能額能實(shí)現(xiàn)嗎?
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 成人高清视频在线观看 | 一二三在线视频 | 国产精品一卡二卡三卡 | 国产 欧美 日韩 一区 | 欧美激情精品久久久久久 | a级毛片毛片免费观看久潮喷 | 99国产精品久久久久 | 国产91亚洲精品一区二区三区 | 欧洲av在线 | 久久久久9999| 亚洲永久| 激情五月婷婷综合 | 性网站免费 | 国产美女精品 | 国产黄色小视频在线观看 | 久久国产一区二区 | 99视频在线看 | 欧美情趣视频 | 亚洲国产视频一区二区 | 国产一区在线免费观看视频 | 美女天天操 | 国产精品美女一区二区 | 一级做a爰片性色毛片 | 在线视频三区 | 国产美女永久免费无遮挡 | 亚洲一区二区久久 | 欧美精品成人 | 成人免费网站www网站高清 | 久久久久国产一区二区三区四区 | 国产激情视频网址 | 成年人网站免费 | 亚洲欧美日韩中文在线 | 一级毛片观看 | 九色综合网 | 亚洲一区二区在线免费观看 | 亚洲精品视频二区 | 一级毛片免费看 | 国产激情一区二区三区 | 日本中文字幕视频 | 国产在线精品一区二区三区 | 亚洲手机视频在线 |