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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 11148|回復: 5
收起左側

Arduino學習11-Arduino模擬電腦鍵盤(基于AVR-USB的USB-HID設備)

[復制鏈接]
ID:114115 發表于 2016-4-18 01:15 | 顯示全部樓層 |閱讀模式
鍵盤作為經典的輸入設備,使用在很多互動中都有特別的優勢,比如我們可以通過鍵盤直接給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
194146uld4tdhd1b111w9d.jpg 1942021gy6n1v41yne26ia.jpg

電路原理圖:
120616mer6qi8i8smt5qs6.gif
電路圖解說:
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支持庫文件:
UsbKeyboard.zip (112.45 KB, 下載次數: 52)
文件下載后解壓到arduino編譯器的libraries文件夾下面。
注意:

1、UsbKeyboard庫中,usbconfig.h里面可以更改USB接線的引腳定義,下面給出一個大概解釋(下面的PORTD是指AVR單片機的PORTD,要查詢Arduino原理圖: Arduino_Uno_Rev3-schematic.pdf (81.39 KB, 下載次數: 15) 才能得到是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 D
USB上拉引腳使用AVR單片機的PORTD,如果改成B就是使用PORTB
#define USB_CFG_PULLUP_BIT  5
USB的上拉電阻接PORTD的第五位PD5,對應Arduino  D5


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

程序示例:
下面的例子演示了用Arduino虛擬鍵盤的應用例子。打開記事本,然后將Arduino的D12引腳和GND連起來,就會打印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穩壓管到GND
  12.     Arduino D4接3.6v穩壓管到GND
  13.     +5v接USB線VCC
  14.     GND接USB線GND
  15.     Arduino D1接一個開關到GND
  16.      
  17.     附:USB線序顏色(由于各生產廠不同,不一定準確,僅供參考)
  18.     *USB鍵鼠:      |        *USB接口
  19.     白<->VCC        |        紅<->VCC
  20.     橙<->D-         |        白<->D-
  21.     綠<->D+         |        綠<->D+
  22.     藍<->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.     }
復制代碼

注意,先插上Arduino數據線,將程序寫入Arduino。然后拔掉數據線,將模擬鍵盤USB線接到電腦,即可使用。

下面隨便點實物圖

剛焊好的正反面
194204xv880393zvisyxn3.jpg 2154270440zvdpvvocmaqc.jpg

插數據線寫程序進Arduino:
1941595x18zxgzaan1fgk5.jpg



回復

使用道具 舉報

ID:114115 發表于 2016-4-18 01:18 | 顯示全部樓層
開始
此時正好手頭沒事,而且所需的硬件都有,所以果斷擺上東西,按照帖子的說明一步步鏈接好電路,下好程序,插上USB線。
“無法識別的USB設備”
懷疑
首先,覺得是自己的接線方法有問題,所以把所有器件都拆下來從新連接上,結構依舊無法識別。看了下跟帖,也有些人說無法識別,但也沒有提出解決方案。
其次,是不是帖子貼出來的代碼有問題呢?遍在網上搜了好多發布的arduino的USB庫和代碼,有的編譯不通,有的編譯成功,但是下載下去之后依舊無法識別。
002125pu4trodp2pt6eqjt.png
再次,懷疑是穩壓管的型號不對,因為用的穩壓管是在桌子上小垃圾堆里照出來的,不知道具體型號。用萬用表量了一下USB信號線的電壓,4+V,果然超了……原貼上建議的是3+V,這下完蛋了,看來這個鼠標我是做不成了。
休息干點別的吧,反正手頭也沒有適合的穩壓二極管。突然靈光一現:這個穩壓管是坐什么用的呢?可能一:作為USB信號線,對靜電比較敏感,所以用穩壓管來釋放經靜電,放置靜電打壞器件。如果是這樣,那就會有如下兩個疑問:1、如果作保護器件的話,去掉這個器件也不會影響系統工作,2、如果是保護器件為什么一定要用3+V的穩壓管呢,我的是4+V的應該也沒有問題啊。顯然不是起保護作用。 可能二:作為USB信號線的阻抗匹配即濾波。因為二極管的PN結寬度會隨兩端點啊的變化而變化,所以二極管是帶有電容性的,如果這樣也會有疑問,1、如上可能性疑問二,既然3+V二極管可以那么4+V的二極管也可以。2,濾波USB低速通信時影響不大。所以也不是其這個作用。最后的可能,因為使用5V的arduino,所以穩壓管的作用就是限制USB數據線的電壓,這個倒是說得通,3+V二極管可以,4+V的二極管也不可以。俗話說要動腦也要動手,所以我火速查了一下USB標準的文檔
232200j44pf6wptz4e7a1f.png
232038yffnzzgngggm5dyh.png
,證明,穩壓管的作用就是把USB信號線的電壓限制在2.8-3.6。這樣既然知道了穩壓管的作用就好辦了,雖然手頭沒有沒有穩壓管,但是把信號線的電壓先知道這個范圍內,方法也很簡單。我讓arduino運行在3.3V這個問題就解決了。因為我用的是arduino pro mini,
0026022i33q4mtnaxx3am3.png
他是電源可外接的,恰好手頭的FTDI也有3。3V輸出,
001732aelndld2x0w1y7me.png
拿來借用一下,OK這個問題解決。USB在此插在電腦上試了一下,發現還是不行,哭了!
最后,發現所給的電路圖中USB信號定義順序有問題,記憶總USB數據線順序是VUSB,D-,D+,GND。而原貼中的順序VUSB,D+,D-,GND。神奇了!還是再看看USB標準吧
235918osoccfkookpiflap.png
也就是說原帖子上拉電阻拉到D-是沒錯的,但是因為D-D+的順序顛倒了,所以大多數人都會把上拉電阻拉到D+。當然我也接錯了,之后調了一下上拉的位置,模擬的鼠標就被識別了。
總之,原帖USB接口線序有問題會誤導大家接線,所以大家的會出現無法識別的問題。貼出來的程序沒問題
另外,傳統不帶USB的AVR能夠實現USB功能,雖然是很常見的事,但是在Arduino在國內還是比較少見的。對于比較專業的Arduino也比較建議使用pro mini這樣的精簡硬件版本,好處有三,第一引出端口超多,方便自己使用。第二體積小,便于潛入各種作品當中,第三價價格低。

第二季主要分析用普通arduino普通IO口模擬USB所需電路的硬件分析
先貼張圖:
145240u7cc9uu9zluzag9u.gif
上圖是5V系統的IO口仿真USB所需的硬件電路。
其實這個電路對大家來說并不陌生,大家手頭的USBasp一般都是采用這個電路,應為這種下載器也是采用沒喲USB接口的AVR來設計的。
先說下2.2k電阻的作用。第一季已經提到過了,USB標準中,低速設備的D-信號線要有1.5k電阻上拉到電源,這里就不在上圖了。因為這個是5V系統,所以使用電阻要比標準電阻大一些。
只有是穩壓二極管。也就是傳說中的齊納二極管,學過模電的同學肯定知道(二極管的方向擊穿有兩種,一種是雪崩擊穿,一種是齊納擊穿。書里大概是這么說的。)穩壓二極管的工作原理就是當反向電壓達到一定值時,他便會被反向擊穿,通過這種方式來穩定電壓。這種擊穿當電壓降低之后二極管可以恢復到正常狀態,幾乎不會對二極管有損壞。不說廢話了,這個二極管的作用就是將數據線電壓有5V等級,穩定到3V左右等級。
最后呢,說下串聯在信號線68歐姆的電阻。這個電阻的作用大家可以探討一下,我這里只是說下自己理解的主要作用。首先呢,還是來看標準,

標準上的意思就是USB信號的單端等效阻抗是28-44歐,所以這個68的電阻其這個作用。第二,這作用個人覺得重要與第一個。當信號被arduino拉到高時,穩壓二極管便會被擊穿。假設沒有這個電阻,因為arduino的IO引腳與穩壓管之間沒有壓降(因為沒有電阻)所以穩壓二極管就要漏下很多電流,知道吧IO口電壓拉低至穩壓電壓。在這種情況下可以認為是IO重負載,所以輸出電流接近AVR的IO的最大驅動電流40mA,這樣會極大損害IO結構,無辜功耗增加,再個就是需要選一個功率稍大的穩壓二極管,這種情況下也會增加不穩定性,有了這兩個電阻便會避免以上問題。這樣看這個電阻可以看做是限流電阻了

在3.3V系統中
2.2K的電阻,當然可以按照標準改為1.5k
再個限流電阻可以去掉了
另外68歐姆的電阻,也有可以去掉的可能……沒試過,稍后去掉看下上來匯報
回復

使用道具 舉報

ID:618619 發表于 2019-10-4 18:53 | 顯示全部樓層
t樓主,提示如下錯誤信息。為何。
Arduino:1.8.9 (Windows 7), 開發板:"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"
正在編譯項目...
"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
為開發板 Arduino/Genuino Uno 編譯時出錯。
回復

使用道具 舉報

ID:618619 發表于 2019-10-6 17:16 | 顯示全部樓層
后來換了一個版本的ide好了
回復

使用道具 舉報

ID:891140 發表于 2021-8-4 18:20 | 顯示全部樓層
請問,USB鍵盤按鍵信息都是布爾數據,如果想做一個外設將0-100%的模擬量輸入電腦,該怎么處理呢?USB鍵盤和鼠標功能額能實現嗎?
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品一区二区在线 | 黑人巨大精品欧美黑白配亚洲 | 福利视频一区二区 | 国产真实精品久久二三区 | 性国产xxxx乳高跟 | 国内精品久久久久久影视8 最新黄色在线观看 | 91xxx在线观看 | 久久午夜精品福利一区二区 | 国产日产欧产精品精品推荐蛮挑 | 天天草草草 | 久久一区视频 | 中文字幕视频在线看 | 中文字幕日韩三级 | 精品久久视频 | 亚洲成人免费 | 精品亚洲国产成av人片传媒 | 国产91黄色| 欧美二区在线 | 日韩有码一区 | 国产情侣久久 | 免费一级大片 | 丁香一区二区 | 欧美一区二区 | 国产精品免费一区二区三区四区 | 欧美三区在线观看 | 欧美9999 | 丁香久久 | 日韩福利 | 一级免费在线视频 | 日韩精品一区二区三区 | 久久精品国产一区二区电影 | 国产91在线 | 亚洲 | 亚洲精品白浆高清久久久久久 | 国产91久久久久久 | 亚州精品天堂中文字幕 | 欧美日韩成人一区二区 | 精品www| 免费看一区二区三区 | 亚洲 中文 欧美 日韩 在线观看 | 特级黄一级播放 | 在线午夜电影 |