در بخشهای قبلی سری آموزشهای کتابخانه keyboard توابعی معرفی شد که به وسیلهی آنها توانستید تا حدودی به وسیلهی آردوینو یک کیبورد مجازی برای رایانه خود ایجاد کنید.در این قسمت توابع باقی مانده از کتابخانه keyboard آموزش داده میشود.در ادامه آموزش با مرجع تخصصی آردوینو ، دیجی اسپارک همراه باشید.
آموزش کتابخانه keyboard آردوینو بخش اول
آموزش کتابخانه keyboard آردوینو بخش دوم
توجه:هنگام استفاده از توابع زیر، کنترل کیبورد کامپیوتر شما به دست آردوینو در میآید پس توجه داشته باشید که برای تست دقیقا مطابق مثالهای ذکر شده عمل کنید.
Keyboard.press()
هنگامی که از این تابع استفاده میکنیم مثل این میماند که دستمان را بر روی یکی از دکمههای کیبورد نگه داریم و دستمان را برنداریم. شکل کلی این تابع به صورت زیر میباشد:
Keyboard.press(char);
به جای char کلیدی که میخواهیم فشار داده شود قرار میگیرد.برای مثال برای فشار دادن کلید CTRL جپ بر روی کیبورد میتوانیم از کد زیر استفاده کنیم:
Keyboard.press(KEY_LEFT_CTRL);
برای سایر کلیدها میتوانید از جدول زیر استفاده کنید.
Key | Hexadecimal value | Decimal value |
KEY_LEFT_CTRL | ۰x80 | ۱۲۸ |
KEY_LEFT_SHIFT | ۰x81 | ۱۲۹ |
KEY_LEFT_ALT | ۰x82 | ۱۳۰ |
KEY_LEFT_GUI | ۰x83 | ۱۳۱ |
KEY_RIGHT_CTRL | ۰x84 | ۱۳۲ |
KEY_RIGHT_SHIFT | ۰x85 | ۱۳۳ |
KEY_RIGHT_ALT | ۰x86 | ۱۳۴ |
KEY_RIGHT_GUI | ۰x87 | ۱۳۵ |
KEY_UP_ARROW | ۰xDA | ۲۱۸ |
KEY_DOWN_ARROW | ۰xD9 | ۲۱۷ |
KEY_LEFT_ARROW | ۰xD8 | ۲۱۶ |
KEY_RIGHT_ARROW | ۰xD7 | ۲۱۵ |
KEY_BACKSPACE | ۰xB2 | ۱۷۸ |
KEY_TAB | ۰xB3 | ۱۷۹ |
KEY_RETURN | ۰xB0 | ۱۷۶ |
KEY_ESC | ۰xB1 | ۱۷۷ |
KEY_INSERT | ۰xD1 | ۲۰۹ |
KEY_DELETE | ۰xD4 | ۲۱۲ |
KEY_PAGE_UP | ۰xD3 | ۲۱۱ |
KEY_PAGE_DOWN | ۰xD6 | ۲۱۴ |
KEY_HOME | ۰xD2 | ۲۱۰ |
KEY_END | ۰xD5 | ۲۱۳ |
KEY_CAPS_LOCK | ۰xC1 | ۱۹۳ |
KEY_F1 | ۰xC2 | ۱۹۴ |
KEY_F2 | ۰xC3 | ۱۹۵ |
KEY_F3 | ۰xC4 | ۱۹۶ |
KEY_F4 | ۰xC5 | ۱۹۷ |
KEY_F5 | ۰xC6 | ۱۹۸ |
KEY_F6 | ۰xC7 | ۱۹۹ |
KEY_F7 | ۰xC8 | ۲۰۰ |
KEY_F8 | ۰xC9 | ۲۰۱ |
KEY_F9 | ۰xCA | ۲۰۲ |
KEY_F10 | ۰xCB | ۲۰۳ |
KEY_F11 | ۰xCC | ۲۰۴ |
KEY_F12 | ۰xCD | ۲۰۵ |
همچنین برای کلیدهای حروفی یا عددی بر روی کیبورد باید آنها را درون یک سبنگل کوت قرار دهیم.برای مثال برای فشار دادن کلید n باید به صورت زیر عمل کرد:
Keyboard.press('n');
(از این تابع برای کلیدهای ترکیبی مثل CTRL+ALT+DELTE یا CTRL+C ، CTRL+V و ….. استفاده میشود.)
برای مثال فرض کنید میخواهیم task manager سیستمعامل ویندوز را باز کنیم. همانطور که میدانید کلید ترکیبی برای این کار CTRL+ALT+DELETE میباشد پس باید به صورت زیر عمل کنید.
Keyboard.press(KEY_LEFT_CTRL); delay(50); Keyboard.press(KEY_LEFT_ALT); delay(50); Keyboard.press(KEY_DELETE);
بعد از این تابع حتما باید از تابع Keyboard.releaseAll و یا Keyboard.release استفاده نمود(در ادامه به توضیح این دو تابع پرداخته میشود)
برای آزمایش یک کلید را به صورت زیر به پین شماره۲ leonardo خود متصل کنید سپس کدهای زیر را بر روی آردوینو آپلود کنید و به مدت یک ثانیه دست خود را بر روی کلید فشار دهید و نتیجه را مشاهده کنید.(باید بعد از یک ثانیه پنجره task manager ویندوز باز شود)
void setup() { // make pin 2 an input and turn on the // pullup resistor so it goes high unless // connected to ground: pinMode(2, INPUT_PULLUP); // initialize control over the keyboard: Keyboard.begin(); } void loop() { while (digitalRead(2) == HIGH) { // do nothing until pin 2 goes low delay(500); } delay(1000); // new document: Keyboard.press(KEY_LEFT_CTRL); delay(50); Keyboard.press(KEY_LEFT_ALT); delay(50); Keyboard.press(KEY_DELETE); Keyboard.releaseAll(); // wait for task manager delay(1000); }
Keyboard.release()
همانطور که در توضیح تابع Keyboard.press گفته شد بعد از استفاده از تابع press باید از تابع realese استفاه شود .به این معنی که دستمان را از روی دکمهی کیبورد مجازی برداشته ایم.شکل این تابع به صورت زیر میباشد:
Keyboard.release(key)
key کلیدی است که میخواهیم دستمان را از روی آن برداریم.به مثال زیر توجه کنید:
برای مثال میخواهیم ابتدا کلید ترکیبی CTRL+n را فشار دهیم سپس بعد از ۱۰۰ میلی ثانیه دستمان را از روی آنها به صورت تک تک برداریم پس باید به صورت زیر عمل کنیم:
/* کلید ctrl را فشار میدهیم */ Keyboard.press(ctrlKey); /* کلید n را فشار میدهیم */ Keyboard.press('n'); delay(100); //دستمان را از روی کلید بر میداریم /* دستمان را از روی کلید ctrl بر میداریم */ Keyboard.release(ctrlKey); /* دستمان را از روی کلید n بر میداریم */ Keyboard.release('n');
Keyboard.releaseAll()
توسط این تابع دستمان را از روی کلیه کلیدهایی که فشار دادیم بر میداریم.( بر خلاف تابع فوق که دستمان را تک تک از روی کلیدها بر میداشتیم ، توسط این تابع دستمان را از روی کلیه کلیدهایی که فشردیم بر میداریم.
برای مثال میخواهیم ابتدا کلید ترکیبی CTRL+n را فشار دهیم سپس بعد از ۱۰۰ میلی ثانیه دستمان را از روی آنها به صورت کلی برداریم پس باید به صورت زیر عمل کنیم:
char ctrlKey = KEY_LEFT_CTRL; void setup() { // make pin 2 an input and turn on the // pullup resistor so it goes high unless // connected to ground: pinMode(2, INPUT_PULLUP); // initialize control over the keyboard: Keyboard.begin(); } void loop() { while (digitalRead(2) == HIGH) { // do nothing until pin 2 goes low delay(500); } delay(1000); // new document: /* کلید CTRL را فشار میدهیم */ Keyboard.press(ctrlKey); /* کلید n را فشار میدهیم */ Keyboard.press('n'); delay(100); //بعد از ۱۰۰ میلی ثانیه دستمان را به صورت کلی از کلید ها بر میداریم Keyboard.releaseAll(); // wait for new window to open: delay(1000); }
Keyboard.end()
توسط این تابع به کار کیبورد مجازی پایان میدهیم.
کلید های ولوم کد کاراکتری شون چی هست؟؟؟
با سلام
ضمن تشکر از توجه شما، نمیدانم منظور سوالتان را درست متوجه شده ام یا خیر، کدهای زیر را بررسی کنید.
float mv = constrain(analogRead(A0) / 10, 0, 100) / 100.00;
vol.tone(1000, 255*mv);
سلام ببخشید مدار این پروژه تون روی اردینو نانو به چه شکل است
ببخشید یه سوال دیگر هم دارم دکمه ی winرو باید چگونه تعریف کرد
سلام و عرض ادب
جناب استاد بعد از وارد کردن کدهای برنامه ابتدای صفحه (کدی که با زدن کلید تسک منیجر ویندوز اجرا می شود) این خطا برایم نمایش داده می شود
لطفا راهنمایی بفرمائید. باتشکر فراوان
Arduino: 1.8.19 (Windows 10), Board: “Arduino Uno”
C:\Program Files (x86)\Arduino\arduino-builder -dump-prefs -logger=machine -hardware C:\Program Files (x86)\Arduino\hardware -hardware C:\Users\safa\AppData\Local\Arduino15\packages -tools C:\Program Files (x86)\Arduino\tools-builder -tools C:\Program Files (x86)\Arduino\hardware\tools\avr -tools C:\Users\safa\AppData\Local\Arduino15\packages -built-in-libraries C:\Program Files (x86)\Arduino\libraries -libraries C:\Users\safa\Documents\Arduino\libraries -fqbn=arduino:avr:uno -vid-pid=2341_0043 -ide-version=10819 -build-path C:\Users\safa\AppData\Local\Temp\arduino_build_788614 -warnings=none -build-cache C:\Users\safa\AppData\Local\Temp\arduino_cache_578676 -prefs=build.warn_data_percentage=75 -prefs=runtime.tools.arduinoOTA.path=C:\Users\safa\AppData\Local\Arduino15\packages\arduino\tools\arduinoOTA\1.3.0 -prefs=runtime.tools.arduinoOTA-1.3.0.path=C:\Users\safa\AppData\Local\Arduino15\packages\arduino\tools\arduinoOTA\1.3.0 -prefs=runtime.tools.avr-gcc.path=C:\Users\safa\AppData\Local\Arduino15\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino7 -prefs=runtime.tools.avr-gcc-7.3.0-atmel3.6.1-arduino7.path=C:\Users\safa\AppData\Local\Arduino15\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino7 -prefs=runtime.tools.avrdude.path=C:\Users\safa\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino17 -prefs=runtime.tools.avrdude-6.3.0-arduino17.path=C:\Users\safa\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino17 -verbose C:\Users\safa\Documents\Arduino\keybord-test\keybord-test.ino
C:\Program Files (x86)\Arduino\arduino-builder -compile -logger=machine -hardware C:\Program Files (x86)\Arduino\hardware -hardware C:\Users\safa\AppData\Local\Arduino15\packages -tools C:\Program Files (x86)\Arduino\tools-builder -tools C:\Program Files (x86)\Arduino\hardware\tools\avr -tools C:\Users\safa\AppData\Local\Arduino15\packages -built-in-libraries C:\Program Files (x86)\Arduino\libraries -libraries C:\Users\safa\Documents\Arduino\libraries -fqbn=arduino:avr:uno -vid-pid=2341_0043 -ide-version=10819 -build-path C:\Users\safa\AppData\Local\Temp\arduino_build_788614 -warnings=none -build-cache C:\Users\safa\AppData\Local\Temp\arduino_cache_578676 -prefs=build.warn_data_percentage=75 -prefs=runtime.tools.arduinoOTA.path=C:\Users\safa\AppData\Local\Arduino15\packages\arduino\tools\arduinoOTA\1.3.0 -prefs=runtime.tools.arduinoOTA-1.3.0.path=C:\Users\safa\AppData\Local\Arduino15\packages\arduino\tools\arduinoOTA\1.3.0 -prefs=runtime.tools.avr-gcc.path=C:\Users\safa\AppData\Local\Arduino15\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino7 -prefs=runtime.tools.avr-gcc-7.3.0-atmel3.6.1-arduino7.path=C:\Users\safa\AppData\Local\Arduino15\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino7 -prefs=runtime.tools.avrdude.path=C:\Users\safa\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino17 -prefs=runtime.tools.avrdude-6.3.0-arduino17.path=C:\Users\safa\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino17 -verbose C:\Users\safa\Documents\Arduino\keybord-test\keybord-test.ino
Using board ‘uno’ from platform in folder: C:\Users\safa\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6
Using core ‘arduino’ from platform in folder: C:\Users\safa\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6
Detecting libraries used…
“C:\\Users\\safa\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\avr-gcc\\7.3.0-atmel3.6.1-arduino7/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=10819 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR “-IC:\\Users\\safa\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.6\\cores\\arduino” “-IC:\\Users\\safa\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.6\\variants\\standard” “C:\\Users\\safa\\AppData\\Local\\Temp\\arduino_build_788614\\sketch\\keybord-test.ino.cpp” -o nul
Generating function prototypes…
“C:\\Users\\safa\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\avr-gcc\\7.3.0-atmel3.6.1-arduino7/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=10819 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR “-IC:\\Users\\safa\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.6\\cores\\arduino” “-IC:\\Users\\safa\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.6\\variants\\standard” “C:\\Users\\safa\\AppData\\Local\\Temp\\arduino_build_788614\\sketch\\keybord-test.ino.cpp” -o “C:\\Users\\safa\\AppData\\Local\\Temp\\arduino_build_788614\\preproc\\ctags_target_for_gcc_minus_e.cpp”
“C:\\Users\\safa\\AppData\\Local\\Arduino15\\packages\\builtin\\tools\\ctags\\5.8-arduino11/ctags” -u –language-force=c++ -f – –c++-kinds=svpf –fields=KSTtzns –line-directives “C:\\Users\\safa\\AppData\\Local\\Temp\\arduino_build_788614\\preproc\\ctags_target_for_gcc_minus_e.cpp”
Compiling sketch…
“C:\\Users\\safa\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\avr-gcc\\7.3.0-atmel3.6.1-arduino7/bin/avr-g++” -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -MMD -flto -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10819 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR “-IC:\\Users\\safa\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.6\\cores\\arduino” “-IC:\\Users\\safa\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.6\\variants\\standard” “C:\\Users\\safa\\AppData\\Local\\Temp\\arduino_build_788614\\sketch\\keybord-test.ino.cpp” -o “C:\\Users\\safa\\AppData\\Local\\Temp\\arduino_build_788614\\sketch\\keybord-test.ino.cpp.o”
C:\Users\safa\Documents\Arduino\keybord-test\keybord-test.ino: In function ‘void setup()’:
keybord-test:7:3: error: ‘Keyboard’ not found. Does your sketch include the line ‘#include ‘?
Keyboard.begin();
^~~~~~~~
C:\Users\safa\Documents\Arduino\keybord-test\keybord-test.ino: In function ‘void loop()’:
keybord-test:17:3: error: ‘Keyboard’ not found. Does your sketch include the line ‘#include ‘?
Keyboard.press(KEY_LEFT_CTRL);
^~~~~~~~
keybord-test:17:18: error: ‘KEY_LEFT_CTRL’ was not declared in this scope
Keyboard.press(KEY_LEFT_CTRL);
^~~~~~~~~~~~~
keybord-test:19:18: error: ‘KEY_LEFT_ALT’ was not declared in this scope
Keyboard.press(KEY_LEFT_ALT);
^~~~~~~~~~~~
keybord-test:21:18: error: ‘KEY_DELETE’ was not declared in this scope
Keyboard.press(KEY_DELETE);
^~~~~~~~~~
exit status 1
‘Keyboard’ not found. Does your sketch include the line ‘#include ‘?
با سلام
کاربر گرامی کلاس های این کتابخانه طی سال ها تغییر کرده است و بایستی این کد را با توجه به آخرین آپدیت کتابخانه تغییر دهید.
البته لازم به ذکر است حد المقدور سعی کردم تمامی کتابخانه های صفحه کلید را نصب کنم. ضمنا در کی پد مشکلی نیست فقط در کیبرد این خطا می دهد
این به دلیل تغییر کتابخانه و آپدیت آن است، کلاس ها را آپدیت کنید.
نام کلید اینتر دقیقا چیه ؟ بهش اشاره ای نشده
با سلام
این مورد تست نشده است.
سلام من متوجه شدم در اردوینو یونو کی برد کار نمی کند مگر اینکه تغییر فرم ورک انجام شود. اولا چرا این موضوع را بطور واضع و مشخص در ابتدای مباحث صفحه کلید به صورت تیتر توضیح بدهید تا تازه کارانی مثل من کلی وقت مشغول سردرگم نباشند. دوم در یکی از مباحث (چنگیز شهدی
مارس ۲۳, ۲۰۱۹ در ۱۱:۲۰ ب.ظ) ایشان قول دادند نحوه تغییر فرم ورک را بگویند که هنوز خبری نشده. سوم اگر کتابخانه ای عوض می شود شما باید در سایت مطالب را بروزرسانی کنید. این مهم در سایت های رایگان هم اتفاق می افتد حال چه برسد به اینکه هم اشتراک می پردازیم هم اینکه باید بریم بشینیم رمز گشایی کنیم که کتابخانه چه تغییری کرده و ما باید چه تغییری در کد انجام دهیم. لذا خواهشمندم کمی بفکر ما تازه کاران هم باشید. بخدا اگر کارکشته بودیم اصلا هزینه نمی کردیم/ باتشکر
باسلام
سپاس از همراهی شما، این پستی که در حال بررسی آن هستید رایگان است. با توجه به اینکه این آموزش بخش سوم است، پیشنهاد میشود دو بخش قبلی را هم بررسی کنید. سپس هرجا که سوالی داشتید در بخش نظرات مطرح کنید.
سلام ببخشید میشه کد کامل این رو بزارید که میگم اگر لطف کنید .میخوام با یه ماژول لمسی کامپیوتر رو با یکبار کلیک به اسلیپ برود اگر هم دو بار روی آن کلیک شد به صفحه ویندوز برگرده
یعنی این که کدی رو به کد قبلی اضافه کنید که با دو با ر کلیک دو بار اسپیس بزنه توی کامپیوتر تا باز بشود همچنین من یک آس ام دی از جی بی دارم که موقع رفتن به اسلیپ یعنی همون یک بار کلیک روی ماژول لمسی رنگ آن آبی شود و وقتی که از اسلیپ در آمد به رنگ سبز در آید و من از آردوینو نانو استفاده می کنم اگر میشود کد کامل آن رو بفرستید و این که مدار آن را در جواب بگویید
با سلام
سپاس از همراهی شما، کد درخواستی شما توسط آردوینو اجرا نمیشود. بلکه بایستی در سیستم عامل مورد استفادهتان یک نرم افزار بنویسید.
سلام ببخشید مدار این پروژه تون روی اردینو نانو به چه شکل است
با سلام
برای استفاده در آردوینو نانو بایستی آدرس دهی پایه ها را تغییر دهید.